【问题标题】:POST JSON data to .asmx webservice将 JSON 数据发布到 .asmx 网络服务
【发布时间】:2011-03-16 03:40:35
【问题描述】:

我正在尝试将一些简单的参数发布到 .asmx 网络服务。
我收到以下错误:请求格式无效:application/json; charset=utf-8.
我真正需要的是能够传递一个复杂的对象,但我无法通过使用 json 内容类型发出 POST 请求。

这是我的网络服务定义

[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);
        }
    });
}

【问题讨论】:

  • 您使用的是哪个 asp.net 版本?成功回调中不应该有 msg.d 吗?

标签: jquery json rest asmx


【解决方案1】:

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

【讨论】:

  • 如果您提及此所需的最低 .Net 版本会很好。
【解决方案2】:

您应该使用 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);
    }
});

如果输入参数更复杂,我建议您使用json2.js 中的JSON.stringify 函数(例如,参见this answer):

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

在最新版本的$.ajax 用法中,myValue1myValue2 可以是复杂结构(具有属性的对象)或具有其他复杂结构或数组作为属性的数组。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-04-03
      • 1970-01-01
      • 2011-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多