【问题标题】:ASP.NET: jQuery AJAX 'data' param problemASP.NET:jQuery AJAX 'data' 参数问题
【发布时间】:2009-06-30 05:33:48
【问题描述】:

我在过去 3 个小时里一直在研究这段代码并试图找到答案。由于我没有成功,我将发布代码并询问我应该在我的 Web 服务上使用哪种参数来处理此请求:

var args = [{ key: 'myId', value: 'myValue' }, { key: 'myOtherId', value: 'myOtherValue'}];
var dataToSend = { name: 'fooId', value: 'fooValue', args: args };
$.ajax({
type: 'POST',
url: 'fooURL',
data: dataToSend,
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: OnSuccess,
error: OnError
});

现在,我应该需要哪种签名才能获得我的“dataToSend”?

我试过了:

[WebMethod, ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string Foo(string name, object value, List<Args> args)
{
    return "OK";
}

public class Args
{
    public string key { get; set; }
    public object value { get; set; }
}

[WebMethod, ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string Foo(string name, object value, object[] args)
{
    return "OK";
}

还有

[WebMethod, ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string Foo(dataToSend dataToSend)
{
    return "OK";
}

public class dataToSend
{
    public string name { get; set; }
    public object value { get; set; }
    public List<Args> args = new List<Args>();

}
public class Args
{
    public string key { get; set; }
    public object value { get; set; }
}

【问题讨论】:

    标签: asp.net jquery ajax


    【解决方案1】:

    尝试将数据作为字符串而不是对象传递,即:

    $.ajax({ ... 数据:'{a:2,b:3}', ... });

    这样做的原因是,如果您将对象指定为数据,那么 jQuery 会使用查询字符串格式序列化数据,而服务器则需要直接使用 JSON 格式。

    尽管告诉 jQuery 使用 JSON 作为数据类型,但还是会发生这种情况——它似乎只与结果相关,而不是发送到服务器的请求负载。

    你那里的所有其他东西在我看来都是正确的。

    【讨论】:

    • 很确定山姆在这里。检查elegantcode.com/2009/02/21/… 了解更多信息。假设字符串修复它,我认为这将是第一个语法。
    【解决方案2】:

    虽然这是一篇较旧的帖子,但我认为我会做出贡献。我一直在发送一个与已接受的帖子相同的想法的关联数组,我只是觉得它更容易写。

    Javascript

    postData[0] = 'data!';
    postData[1] = 'moar data!';
    postData[2] = 'and some data';
    
    $.ajax({
        type: 'POST',
        url: 'postUrl',
        data: { data: postData },
    });
    

    PHP

    $data = $_POST['data'][0];
    $moar_data = $_POST['data'][1];
    $and_some_data = $_POST['data'][2];
    

    【讨论】:

      【解决方案3】:

      如果您使用支持 JSON 的 .NET WebServices/WebMethods...我的建议是:

      • 对 web.config 配置要非常小心。使用它来启用大参数、POST 方法和 JSON。

      • 使用框架来处理对象序列化和反序列化。我会推荐 NewtonSoft 的 Json.NET。

      我不认为 ASP.NET 会自动为您执行此操作,您的参数始终是字符串。您应该获取该字符串,对其进行反序列化并将其转换为对象数组。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-11
      • 1970-01-01
      • 1970-01-01
      • 2020-11-06
      • 2013-01-25
      • 2011-02-27
      • 1970-01-01
      • 2015-05-18
      相关资源
      最近更新 更多