我正在尝试将一些简单的参数发布到.asmx webservice
我收到以下错误: 请求格式无效:application / json;字符集= UTF-8。
我真正需要的是能够传递一个复杂的对象,但我无法通过json内容类型发出POST请求。
这是我的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);
}
});
}
答案 0 :(得分:5)
确保您的ASMX服务类使用[ScriptService]
属性进行修饰。
答案 1 :(得分:1)
您应该使用格式为正确的JSON数据的值data
:
{"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);
}
});
如果输入参数更复杂,我建议您使用json2.js中的JSON.stringify
函数(例如,请参阅this answer):
var myValue1 = 105, myValue2 = 23;
$.ajax({
type: 'POST',
data: JSON.stringify({myparm1:myValue1, myparm2:myValue2}),
...
});
在$.ajax
用法的最后一个版本中,myValue1
和myValue2
可以是复杂结构(具有属性的对象),也可以是具有其他复杂结构或数组作为属性的数组。
答案 2 :(得分:0)
使用localhost时,请确保URL包含端口号。
url: "http://localhost:1297/WebServices/MyTest.asmx/JsonTest2",