Jquery Ajax Publicar json en webservice


Estoy tratando de publicar un objeto JSON en un asp.net servicio web.

Mi json se ve así:

var markers = { "markers": [
  { "position": "128.3657142857143", "markerPosition": "7" },
  { "position": "235.1944023323615", "markerPosition": "19" },
  { "position": "42.5978231292517", "markerPosition": "-3" }
]};

Estoy usando el json2.js para stringyfy mi objeto json.

Y estoy usando jquery para publicarlo en mi servicio web.

  $.ajax({
        type: "POST",
        url: "/webservices/PodcastService.asmx/CreateMarkers",
        data: markers,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(data){alert(data);},
        failure: function(errMsg) {
            alert(errMsg);
        }
  });

Estoy recibiendo el siguiente error:

" Primitivo JSON inválido:

He encontrado un montón de publicaciones relacionadas con esto y parece ser un problema muy común, pero nada de lo que intento soluciona el problema.

Cuando firebug lo que está siendo publicado en el servidor se ve así:

Markers%5B0%5D%5Bposition%5D=128.3657142857143&markers%5B0%5D%5BmarkerPosition%5D=7&markers%5B1%5D%5Bposition%5D=235.1944023323615&markers%5B1%5D%5BmarkerPosition%5D=19&markers%5B2%5D%5Bposition%5D=42.5978231292517&markers%5B2%5D%5BmarkerPosition%5D=-3

Mi función webservice a la que se está llamando es:

[WebMethod]
public string CreateMarkers(string markerArray)
{
    return "received markers";
}
Author: Cœur, 2011-06-12

6 answers

Usted mencionó el uso de json2.js para stringify sus datos, pero los datos publicados parecen ser URLEncoded JSON Puede que ya lo haya visto, pero este post sobre el primitivo JSON inválido cubre por qué el JSON está siendo URLEncoded.

Yo desaconsejaría que se pase una cadena JSON sin procesar y serializada manualmente a su método. ASP.NET va a deserializar automáticamente JSON los datos POST de la solicitud, por lo que si está serializando manualmente y enviando una cadena JSON a ASP.NET, usted realmente va a terminar teniendo que serializar JSON su cadena serializada JSON.

Yo sugeriría algo más en este sentido:

var markers = [{ "position": "128.3657142857143", "markerPosition": "7" },
               { "position": "235.1944023323615", "markerPosition": "19" },
               { "position": "42.5978231292517", "markerPosition": "-3" }];

$.ajax({
    type: "POST",
    url: "/webservices/PodcastService.asmx/CreateMarkers",
    // The key needs to match your method's input parameter (case-sensitive).
    data: JSON.stringify({ Markers: markers }),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(data){alert(data);},
    failure: function(errMsg) {
        alert(errMsg);
    }
});

La clave para evitar el problema primitivo JSON no válido es pasar a jQuery una cadena JSON para el parámetro data, no un objeto JavaScript, para que jQuery no intente codificar url sus datos.

En el lado del servidor, haga coincidir los parámetros de entrada de su método con la forma de los datos que está pasando:

public class Marker
{
  public decimal position { get; set; }
  public int markerPosition { get; set; }
}

[WebMethod]
public string CreateMarkers(List<Marker> Markers)
{
  return "Received " + Markers.Count + " markers.";
}

También puedes acepte una matriz, como Marker[] Markers, si lo prefiere. El deserializador que usa ASMX ScriptServices (JavaScriptSerializer) es bastante flexible y hará todo lo posible para convertir los datos de entrada en el tipo del lado del servidor que especifique.

 333
Author: Dave Ward,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-28 20:51:37
  1. markers no es un objeto JSON. Es un objeto JavaScript normal.
  2. Lea acerca de la opción data: :

    Datos a enviar al servidor. Se convierte en una cadena de consulta , si aún no es una cadena.

Si desea enviar los datos como JSON, primero debe codificarlos:

data: {markers: JSON.stringify(markers)}

JQuery no convierte objetos o arrays a JSON automáticamente.


Pero asumo que el mensaje de error viene de interpretación de la respuesta del servicio. El texto que envías no es JSON. Las cadenas JSON tienen que estar entre comillas dobles. Así que tendrías que hacer:

return "\"received markers\"";

No estoy seguro de si su problema real es enviar o recibir los datos.

 12
Author: Felix Kling,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-12 17:31:02

He encontrado este también y esta es mi solución.

Si encuentra una excepción de objeto json no válida al analizar datos, aunque sepa que su cadena json es correcta, stringify los datos que recibió en su código ajax antes de analizarlos en JSON:

$.post(CONTEXT+"servlet/capture",{
        yesTransactionId : yesTransactionId, 
        productOfferId : productOfferId
        },
        function(data){
            try{
                var trimData = $.trim(JSON.stringify(data));
                var obj      = $.parseJSON(trimData);
                if(obj.success == 'true'){ 
                    //some codes ...
 2
Author: Clare Panganoron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-05 08:57:26

Probé la solución de Dave Ward. La parte de datos no se enviaba desde el navegador en la parte de carga útil de la solicitud post, ya que el ContentType está establecido en "application/json". Una vez que eliminé esta línea todo funcionó muy bien.

var markers = [{ "position": "128.3657142857143", "markerPosition": "7" },

               { "position": "235.1944023323615", "markerPosition": "19" },

               { "position": "42.5978231292517", "markerPosition": "-3" }];

$.ajax({

    type: "POST",
    url: "/webservices/PodcastService.asmx/CreateMarkers",
    // The key needs to match your method's input parameter (case-sensitive).
    data: JSON.stringify({ Markers: markers }),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(data){alert(data);},
    failure: function(errMsg) {
        alert(errMsg);
    }
});
 2
Author: Usha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-29 12:52:14

Tengo una consulta,

$("#login-button").click(function(e){ alert("hiii");

        var username = $("#username-field").val();
        var password = $("#username-field").val();

        alert(username);
        alert("password" + password);



        var markers = { "userName" : "admin","password" : "admin123"};
        $.ajax({
            type: "POST",
            url: url,
            // The key needs to match your method's input parameter (case-sensitive).
            data: JSON.stringify(markers),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(data){alert("got the data"+data);},
            failure: function(errMsg) {
                alert(errMsg);
            }
        });

    });

Estoy publicando los detalles de inicio de sesión en json y obteniendo una cadena como "Success", pero no estoy recibiendo la respuesta.

 1
Author: Priya B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-23 04:44:27

Por favor, siga esto a por llamada ajax a webservice de java var param = { Nombre de FEILD: feildValue }; JSON.stringify ({data : param})

$.ajax({
            dataType    : 'json',
            type        : 'POST',
            contentType : 'application/json',
            url         : '<%=request.getContextPath()%>/rest/priceGroups',
            data        : JSON.stringify({data : param}),
            success     : function(res) {
                if(res.success == true){
                    $('#alertMessage').html('Successfully price group created.').addClass('alert alert-success fade in');
                    $('#alertMessage').removeClass('alert-danger alert-info');
                    initPriceGroupsList();
                    priceGroupId = 0;
                    resetForm();                                                                    
                }else{                          
                    $('#alertMessage').html(res.message).addClass('alert alert-danger fade in');
                }
                $('#alertMessage').alert();         
                window.setTimeout(function() { 
                    $('#alertMessage').removeClass('in');
                    document.getElementById('message').style.display = 'none';
                }, 5000);
            }
        });
 -1
Author: Ravi Panchal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-29 10:15:27