2011-10-20 37 views
13

No puedo obtener la siguiente función para que funcione correctamente. Parece estar serializando mal. Esta es la quinta iteración de diferentes variantes de datos. Originalmente estaba haciendo datos: {'id': id} como lo hago en el trabajo con WCF, pero con ASMX simplemente no funciona. Parece que está serializando los datos como id = 1234 en lugar de id: 1234, pero soy bastante nuevo en esto. Cualquier ayuda sería apreciada. Ah, y puedo llamar al servicio directamente en el navegador y devuelve los datos correctamente para que sepa que no es el servicio.Primitiva JSON no válida: id

function getVentID(id) { 
    //look up id in database and get VentID 
    alert('id: ' + id); 
    var jsdata = { "id": + id} 
    $.ajax({ 
     type: 'POST', 
     contentType: 'application/json; charset=utf-8', 
     url: 'services/UserService.asmx/getVentID', 
     data: jsdata, 
     dataType: 'json', 
     success: function (msg) { 
      alert(msg.d); 
     }, 
     error: function (a, b, c) { 
      alert('Error: ' + a.toString() + ' ' + b.toString() + " " + c.toString()); 
     } 
    }); 
} 

p.s. Sé que hay como 10 preguntas idénticas pero ninguna de ellas tiene respuestas que pude encontrar o que funcionó para mí.

Respuesta

30

La solución más simple posible sería cambiar la línea que empieza var jsdata a:

var jsdata = '{id:' + id + '}'; 

El problema es que jQuery está codificando jsdata como datos de formulario, no como JSON. El parámetro dataType influye en cómo se analiza la respuesta, no cómo se codifica la información POST.

No hay ningún código de serialización JSON en jQuery, según mi leal saber y entender. Aparentemente John Resig suggests using Douglas Crockford's json2.js.

Para usarlo, agregue una referencia a la escritura y luego json.js:

var jstext = JSON.stringify(jsdata, null, 2); 
+1

Bueno, técnicamente que solucionó el error que he publicado, pero ahora me sale: llamada de servicio web no válida, el valor faltante para el parámetro:. \ U0027ID \ u0027 "" StackTrace ":" al System.Web.Script .Services.WebServiceMethodData.CallMethod ... etc. ¿Alguna idea? –

+0

Traté de cambiar la carcasa ya que el nuevo error dice ID en lugar de identificación, pero no ayudó y ni siquiera sé si eso está relacionado ... –

+0

Hmmm. Admito que no sé exactamente qué espera Asmx. ¿Qué es un ejemplo de lo que haces directamente en tu navegador que funciona? Definitivamente puedo ayudar a traducir eso a una llamada jQuery. – sblom

0

i resolvieron este problema en este momento.

Usted necesita pasar la URL en este formato:

http://domain.com.br/service.asmx/method?objParam= {q: "búsqueda"}

Y en su archivo Service.asmx, debe declarar este método:

Public Function method(objParam As Dictionary(Of String, String)) 

End Function 

En su código, se ve así:

function getVentID(id) { 
 
    var jsdata = { 
 
    "id": +id 
 
    } 
 
    var sData = JSON.stringify(jsdata); //convert your json in string 
 
    $.ajax({ 
 
    type: 'POST', 
 
    contentType: 'application/json; charset=utf-8', 
 
    url: 'services/UserService.asmx/getVentID', 
 
    data: { 
 
     id: sData 
 
    }, 
 
    dataType: 'json', 
 
    success: function(msg) { 
 
     alert(msg.d); 
 
    }, 
 
    error: function(a, b, c) { 
 
     alert('Error: ' + a.toString() + ' ' + b.toString() + " " + c.toString()); 
 
    } 
 
    }); 
 
}

Cuestiones relacionadas