252 messaggi dal 03 dicembre 2001
www.fuossbook.it
Ciao u235,
grazie per avermi risposto.
Intanto ho capito come possiamo chiamare un metodo tramite javascript, che è una cosa che stavo cercando di capire proprio stamattina.

Purtroppo lo script non mi va, e non mi da nemmeno errore, scrivo solo ora perchè ho provato a capire cosa potesse non andare , ma non ci sono riuscito , non ho nemmeno errori ne in visual studio ne nella console deo browser.
Ho messo un punto di interruzione nel ciclo che nel metodo CaricaDati, ma non si blocca, quindi ho la sensazione che non stia chiamando proprio il metodo Ajax

Ti incollo quello che ho fatto, che è stato incollare il tuo codice cambiando solo test in test2 perchè già avevo un altra pagina su cui sto facendo prove

A te và vero?
Grazie


<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test2.aspx.cs" Inherits="test2" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false&key=AIzaSyAELIzBDp8lDdOhkIoUQ994I82K85mulWc"></script>


    <title></title>
</head>
<body>
   
    
       <form id="form1" runat="server">
        <div style="width:500px; height:300px" id="map"></div>
    </form>    
    <button onclick="caricaDati()">Carica Dati</button>
    <script>
        var infoWindow = new google.maps.InfoWindow();
        var markers = [];
        var map;
        var lat = 0;
        var lon = 0;
        var mapOptions = {
            center: new google.maps.LatLng(lat, lon),
            zoom: 12,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map(document.getElementById("map"), mapOptions);
        if (navigator.geolocation) {
            navigator.geolocation.getCurrentPosition(getPosition, alert);
        }

        function getPosition(actualPosition) {
            //imposto la posizione attuale
            lat = actualPosition.coords.latitude;
            lon = actualPosition.coords.longitude;
            //centro la mappa sulla posizione attuale
            map.setCenter(new google.maps.LatLng(lat, lon));
            //imposto lo zoom
            map.setZoom(8);
            //carico i dati relativi alla posizione.
            caricaDati();
        } 
        function caricaDati() {
            //richiamo le coordinate sul server passando la posizione attuale
            
            $.ajax({
               
                //chiamata di tipo POST
                type: "POST",
                //indirizzo composto dal nome della pagina piu il nome del metodo
                url: "test2.aspx/CaricaDati",
                //tipo dati json
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                //passo i parametri post 
                data: "{'posizione':{'Lat':" + lat + ",'Lon':" + lon + "}}",
                cache: false,
                success: function (result) { impostaMarkers(result.d);},
                failure: function (error) { alert(error.d); }
            });
        }
        function impostaMarkers(coordinate) {
            //cancello i vecchi markers
            for (var i = 0; i < markers.length; i++) {
                markers[i].setMap(null);
            }
            markers = [];
            //itero tutte le coordinate ricevute
            var latLon;
            $.each(coordinate, function (index, item) {
               
                //creo il marker a partire dalla coordinata restituita
                latLon = new google.maps.LatLng(item.Lat, item.Lon);
                var marker = new google.maps.Marker({
                    position: latLon,
                    type: 'info',
                    map: map,
                    title: item.Titolo
                });
                markers.push(marker);
                google.maps.event.addListener(marker, "click", function (e) {
                    infoWindow.setContent(item.Titolo);
                    infoWindow.open(map, marker);
                });
                //solo per test: sposto la posizione all'ultima coordinata ricevuta
                lat = item.Lat;
                lon = item.Lon;
            });
        }
</script>
</body>
</html>





using System;
using System.Collections.Generic;
using System.IO;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Services;
using System.Globalization;


public partial class test2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }


    [System.Web.Services.WebMethod]
    public static Coordinata[] CaricaDati(Coordinata posizione)
    {
        List<Coordinata> result = new List<Coordinata>();
        for (int i = 0; i < 5; i++)
        {
            result.Add(new Coordinata() { Lat = posizione.Lat + (i + 0.10) * 0.10, Lon = posizione.Lon + (i - 0.10) * -0.10, Titolo = string.Format("Marker {0}", i + 1) });
            Console.WriteLine("i " + i);
        }
        return result.ToArray();
    }


    

}
    public class Coordinata
    {
        public double Lat { get; set; }
        public double Lon { get; set; }
        public string Titolo { get; set; }
    }


***************************
webmaster di:
hydrasail.blogspot.it
fuossbook.it
***************************
59 messaggi dal 17 maggio 2010
Ciao,
la mappa riescia vederla? se si diminuisci lo zoom sino a vedere tutto il mondo e controlla se ci sono dei markers. In questo caso è possibile che non abbia dato l'ok per la localizzazione, di conseguenza i markers si trovano a partire dalla latlon 0 (a sud della costa d'avorio).
Oppure potrebbe essere un problema di routing del server, in questo caso con fiddler (ti conviene scaricarlo fin da ora se hai intenzione di lavorare con ajax) puoi controllare se parte la chiamata e dove va, e se c'è qualche errore "occulto" restituito dal server. Sarebbe anche un buon esercizio.
Dubito possa essere un problema di framework o riferimenti, ma per sicurezza puoi fare un resoconto di cosa usi? eventualmente puoi condividere il progetto così com'è on line?
Prova anche a cliccare continuamente, si dovrebbero spostare i markers in direzione nord-nord/ovest.
252 messaggi dal 03 dicembre 2001
www.fuossbook.it
Ciao u235,
grazie per le riposte.
Intanto ho scaricato Fiddler, che non avevo ma sto iniziando ora con questa tipologia di problemi, ho anche visto un tutorial su youtube per capire come funzionava prima di girare a vuoto.
L'ho anche testato con un altra webservice(asmx) mia che ho fatto ieri per esercitarmi e per capire cosa stavo facendo.
Intanto ti dico stamattina che cosa ho fatto .
per prima cosa ho modificato il tuo script, perchè i punti che mi hai dato non li vedevo, già ieri prima che mi rispondessi avevo fatto dei test con lo zoom, ma nulla
Lo script che ho messo è questo



  [System.Web.Services.WebMethod]
    public static Coordinata[] CaricaDati(Coordinata posizione)
    {


        double primaLat = 43.610769;
        double primaLon = 3.8767159999999876;

        List<Coordinata> result = new List<Coordinata>();
        for (int i = 0; i < 5; i++)
        {

          
            result.Add(new Coordinata() { Lat = primaLat, Lon = primaLon, Titolo = string.Format("Marker {0}", i + 1) });
           
            primaLat = primaLat + 0.1;
            primaLon = primaLon + 0.2;

        }
        return result.ToArray();
    }



In pratica ho definito due coordinate sulla mappa e da li come hai fatto tu sono andato a sommare dei valori.
Per testarla ho anche spostato il codice nel page_load .
Tutto gira in page load, naturalmente non ho visto i punti.
Quindi ho testato il tuo script, ho messo anche un alert nel js per vedere se partiva e a partire effettivamente parte, ma non succede nulla, sulla mappa non ho risultati

Ah dimenticavo...la mappa la vedo

A questo punto sono passato a Fiddler
Ho eseguito tutto in due modalità
La prima andando a richiamare la pagina nel browser e vedendo cosa succedeva nella session a sinistra del programma.
Mi sono trovato la chiamata a http://localhost:56645/test2/CaricaDati
clicco sulla voce e in Inspector mi trovo
sopra json con un nodo posizione e due nodi 'Lat'=43.6872294 e 'Lon'=4.1316182
Nella barra che divide il riquadro di sotto leggo WARNING: illegal/unquoted identifier "posizione" at position 1
illegal/Unquoted indetifier "Lat" at position 14

Nella parte di sotto ho un altro json
con questi nodi
ExceptionType=System.InvalidOperationException
Message=Autenticazione non riuscita.
StackTrace=(null)

l'unica autenticazione che faccio io è con le api di google e la chiave è giusta perchè la uso in un altra pagina senza problemi

il secondo test invece l'ho fatto andando in composer e mettendo l'url http://localhost:56645/test2/CaricaDati
in json non ho nulla ma in textview ho tutto l'html della pagina.

Suggerimenti?
Grazie

***************************
webmaster di:
hydrasail.blogspot.it
fuossbook.it
***************************
252 messaggi dal 03 dicembre 2001
www.fuossbook.it
A titolo informativo,
dato che sto provando a fare delle api(asmx) ho preso quel codice e inserito in un file che poi ho testato con Fiddler e gira senza problemi


[System.Web.Services.WebMethod]
    public  Coordinata[] CaricaDati(Coordinata posizione)
    {


        double primaLat = 43.610769;
        double primaLon = 3.8767159999999876;

        List<Coordinata> result = new List<Coordinata>();
        for (int i = 0; i < 5; i++)
        {

       
            result.Add(new Coordinata() { Lat = primaLat, Lon = primaLon, Titolo = string.Format("Marker {0}", i + 1) });

            primaLat = primaLat + 0.1;
            primaLon = primaLon + 0.2;

        }
        return result.ToArray();
    }

    [System.Web.Services.WebMethod]
    public Coordinata[] CaricaDati2()
    {


        double primaLat = 43.610769;
        double primaLon = 3.8767159999999876;

        List<Coordinata> result = new List<Coordinata>();
        for (int i = 0; i < 5; i++)
        {

           
            result.Add(new Coordinata() { Lat = primaLat, Lon = primaLon, Titolo = string.Format("Marker {0}", i + 1) });

            primaLat = primaLat + 0.1;
            primaLon = primaLon + 0.2;

        }
        return result.ToArray();
    }


***************************
webmaster di:
hydrasail.blogspot.it
fuossbook.it
***************************
59 messaggi dal 17 maggio 2010
Se sei all'interno di un ambiente protetto da autenticazione è normale questo comportamento. semplicemente non trasmetti l'autenticazione.

ci sono diverse strade per risolvere, una di queste è utilizzare un servizio al posto della pagina. Ma ne esistono anche altre. In ogni caso sei sulla giusta strada, quindi credo sia inutile risolvere in altro modo il problema.

Mi confermi che sei riuscito a fare quello che volevi?
252 messaggi dal 03 dicembre 2001
www.fuossbook.it
u235 ha scritto:
Se sei all'interno di un ambiente protetto da autenticazione è normale questo comportamento. semplicemente non trasmetti l'autenticazione.

ci sono diverse strade per risolvere, una di queste è utilizzare un servizio al posto della pagina. Ma ne esistono anche altre. In ogni caso sei sulla giusta strada, quindi credo sia inutile risolvere in altro modo il problema.

Mi confermi che sei riuscito a fare quello che volevi?



Grazie a tutti per il vostro supporto.
Ho capito molte cose e alla fine grazie a voi ce l'ho fatta.
Ho dovuto apportare un po di modifiche man mano e fare molti test, ma ce l'ho fatta , devo dire che senza Fiddler sarebbe stato impossibile.

Non so perchè di default sia commentata ma ho dovuto decommentare questa riga
[System.Web.Script.Services.ScriptService]

Volevo chiedere per utilizzare tutto al meglio
1) che differenza c'è tra un controller e un asmx
2) un metodo che ho fatto in un asmx lo posso richiamare anche da un altra pagina nel codice c# senza javascript o da un altro metodo in un cs o classe?

E infine, ad un certo punto mi hai scritto tra le cose che poteto condividere il progetto online, come?

Grazie ancora
Modificato da cyberkings il 02 dicembre 2016 18.09 -

***************************
webmaster di:
hydrasail.blogspot.it
fuossbook.it
***************************

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.