2011-03-16 27 views
7

Estoy tratando de publicar algunos parámetros simples en un servicio web .asmx.
Aparece el siguiente error: El formato de solicitud no es válido: application/json; charset = utf-8.
Lo que realmente tengo que hacer es poder pasar un objeto complejo, pero no puedo pasar una solicitud POST con el tipo de contenido json.POST datos JSON en .asmx webservice

Aquí es mi WebService Definición

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public int JsonTest2(int myparm1, int myparm2) 
{ 
    return 101; 
} 

y este es mi código javascript

function JsonTest2() { 
    $.ajax({ 
     type: 'POST', 
     url: "http://localhost/WebServices/MyTest.asmx/JsonTest2", 
     data: "{myparm1:105,myparm2:23}", 
     contentType: 'application/json; charset=UTF-8', 
     dataType: 'json', 
     async: false, 
     success: function (msg) { 
      alert(msg); 
     }, 
     error: function (msg) { 
      alert('failure'); 
      alert(msg); 
     } 
    }); 
} 
+2

¿Qué versión de asp.net estás usando? ¿no debería haber un msg.d en la devolución de llamada exitosa? – naveen

Respuesta

5

Asegúrese de que su clase de servicio ASMX está decorado con el atributo [ScriptService].

+0

Sería bueno si menciona la versión .Net mínima necesaria para esto. – Lijo

1

que puedes usar como data valor que el formato de datos JSON como correctas:

{"myparm1":105,"myparm2":23} 

en lugar de

{myparm1:105,myparm2:23} 

Puede validar en el sitio http://www.jsonlint.com/ la que los datos son datos JSON. Por lo que debe cambiar el código para

$.ajax({ 
    type: 'POST', 
    url: "http://localhost/WebServices/MyTest.asmx/JsonTest2", 
    data: '{"myparm1":105,"myparm2":23}', 
    contentType: 'application/json; charset=UTF-8', 
    dataType: 'json', 
    async: false, 
    success: function (msg) { 
     alert(msg.d); 
    }, 
    error: function (msg) { 
     alert('failure'); 
     alert(msg); 
    } 
}); 

En caso de parámetros de entrada más complejos Te recomiendo usar JSON.stringify functionfrom la json2.js (ver this answer por ejemplo):

var myValue1 = 105, myValue2 = 23; 
$.ajax({ 
    type: 'POST', 
    data: JSON.stringify({myparm1:myValue1, myparm2:myValue2}), 
    ... 
}); 

En la última versión de $.ajax el uso myValue1 y myValue2 pueden ser estructuras complejas (objetos con propiedades) o matrices que tienen incluso otras estructuras complejas o matrices como propiedades.

0

Asegúrate de que la URL contenga el número de puerto cuando uses localhost.

url: "http://localhost:1297/WebServices/MyTest.asmx/JsonTest2", 
Cuestiones relacionadas