Tengo este código :

var mapcity = new Array([]);              

         $.ajax({
             type: 'GET',
             url: '/home/DrawMap',
             dataType: 'json',
             success: function (data) {

                 var len = data.length;

                 for (var i = 0; i < len; i++) {

                    //mapcity['' + data[i].name + ''] = { center: new google.maps.LatLng(data[i].x, data[i].y), population: data[i].population, name: '' + data[i].name + '' };
                     mapcity['' + data[i].name + ''] = { center: new google.maps.LatLng(data[i].x, data[i].y), population: data[i].population, name: ''+data[i].name+'' };
                     //newarr[i] = data[i].name;

                   alert(mapcity[0].population)
                 }
                 }
         });
}

Esta es una parte de mi código, y esta es la función de controlador :

public ActionResult DrawMap() {   

  string data = "[{ 'x':31.949454,'y': 35.932913,'population':50000,'name':'amman'},{ 'x':33.79,'y': 33.39,'population':100000,'name':'Zarqa'}]";
        data=data.Replace("'","\"");
        return this.Content(data, "application/json");       

    }

Cuando ejecuto este, su het los datos JSON desde el controlador, pero sin guardarlo en la mapcity variable!
Y no hace nada. ¿cómo puedo solucionarlo y lo iam haciendo mal?

  • ¿cuál es la sintaxis de plx ?
  • ¿cuál es tu backend ?
  • iam usando ASP.net MVC 4
  • Respuesta.Escribir (que//de datos JSON);
InformationsquelleAutor mothana | 2013-09-12

2 Comentarios

  1. 7

    Nunca debe ser manualmente la construcción de JSON como lo hizo pero siempre uso un JSON serializador:

    public ActionResult DrawMap() 
    {
        var data = new[]
        {
            new
            {
                x = 31.949454,
                y = 35.932913,
                population = 50000,
                name = "amman",
            },
            new
            {
                x = 33.79,
                y = 33.39,
                population = 100000,
                name = "Zarqa",
            }
        };
    
        return Json(data, JsonRequestBehavior.AllowGet);
    }

    También ha declarado su mapcity variable fuera de el éxito de controlador que me lleva a pensar que usted está tratando de usar su valor inmediatamente después de la $.llamada ajax que, obviamente, no es posible porque el AJAX, por su propia naturaleza es asincrónica. Esto significa que el éxito de devolución de llamada podría ser ejecutado mucho más tarde y el $.llamada ajax devuelve inmediatamente.

    Así que el único lugar seguro para el uso de esta variable es DENTRO de el éxito de la función:

    $.ajax({
        type: 'GET',
        url: '/home/DrawMap',
        success: function (data) {
            var mapcity = {};
            var len = data.length;
            for (var i = 0; i < len; i++) {
                mapcity['' + data[i].name + ''] = { center: new google.maps.LatLng(data[i].x, data[i].y), population: data[i].population, name: ''+data[i].name+'' };
            }
        }
    });

    También tiene otro problema. Usted declaró mapcity variable como array (new Array([])) y, a continuación, intenta insertar no entero índices en él:

    mapcity['' + data[i].name + '']

    En javascript cuando se declara un array, que sólo puede tener 0 entero de base de los índices. Así que usted puede declarar como un objeto de javascript var mapcity = {}; o utilizar entero sólo índices.

  2. 0

    Manera más fácil:

    Su matriz de cadenas:

    var data;
    data.push('string1');
    data.push('string2');
    
    var jData = JSON.stringify(data); //convert to Json string
    
    $.ajax({
        type: "POST",
        traditional: true,
        dataType: 'json',
        contentType: "application/json; charset=utf-8",
        url: "/Controller/MethodName",
        data: jData ,
        success: function (result) {
           if (result) {
           }
        }
    });

    Controlador:

    public ActionResult MethodName(List<String> jData )
    {
       ....
       return Json(yourResult);
    }

Dejar respuesta

Please enter your comment!
Please enter your name here