2011-03-16 183 views
7

我想要发布一些简单的参数到.asmx webservice。
我收到以下错误:请求格式无效:application/json;字符集= UTF-8。
我真正需要的是能够传递一个复杂的对象,但我无法通过使用json内容类型进行POST请求。POST JSON数据到.asmx webservice

这里是我的WebService定义

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

这是我的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

你正在使用哪个asp.net版本?成功回调中不应该有msg.d吗? – naveen 2011-03-16 04:00:28

回答

5

确保您的ASMX服务类装饰用[ScriptService]属性。

+0

如果你提到这个所需的最低.Net版本,那将会很好。 – Lijo 2014-06-12 17:47:47

1

您应该data其格式化为正确的JSON数据值中使用:的

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

代替

{myparm1:105,myparm2:23} 

您可以在网站http://www.jsonlint.com/数据是JSON数据的验证。所以,你应该更改您的代码

$.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); 
    } 
}); 

在更复杂的输入参数的情况下,我建议你使用JSON.stringify functionfrom的json2.js(见this answer为例):

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

$.ajax的最后一个版本使用myValue1myValue2可以是复杂的结构(具有属性的对象)或具有甚至另一个复杂结构或数组作为属性的数组。

0

确保URL在使用本地主机时包含端口号。

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