将JSON数据POST到.asmx webservice

时间:2011-03-16 03:40:35

标签: jquery json rest asmx

我正在尝试将一些简单的参数发布到.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);
        }
    });
}

3 个答案:

答案 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用法的最后一个版本中,myValue1myValue2可以是复杂结构(具有属性的对象),也可以是具有其他复杂结构或数组作为属性的数组。

答案 2 :(得分:0)

使用localhost时,请确保URL包含端口号。

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