【问题标题】:Jquery ajax: object in data objectJquery ajax:数据对象中的对象
【发布时间】:2013-07-10 03:01:40
【问题描述】:

我需要在数据对象中传递一个对象,但它不起作用

我使用我在这个网站上找到的以下功能,非常有用,将表单数据转换为 JSON

$.fn.serializeObject = function()
{
    var o = {};
    var a = this.serializeArray();
    $.each(a, function() {
        if (o[this.name] !== undefined) {
            if (!o[this.name].push) {
                o[this.name] = [o[this.name]];
            }
            o[this.name].push(this.value || '');
        } else {
            o[this.name] = this.value || '';
        }
    });
    return o;
};

然后我需要将该对象作为子对象传递,但它不起作用。过滤器甚至没有显示在检查器的查询字符串参数中

var filters = $('.filtersForm').serializeObject();

$.ajax({
    type: 'GET',
    data: {script:'search',page:page,filters:filters},
    success: function(data){
    }
});

查看图片中如何缺少“过滤器”

有人能解释一下为什么我不能传递这样的对象吗?

【问题讨论】:

  • 您使用这个 serializeObject 函数而不是 JSON.stringify() 的任何特殊原因?

标签: javascript ajax json object


【解决方案1】:

试试这个:

$.ajax({
  type: 'POST',
  data: JSON.stringify({
    script: 'search',
    page: page,
    filters: filters
  }),
  contentType: 'application/json'
});
  1. 类型GET 更改为 POST。这将允许您发送请求正文。
  2. 使用内置 JSON 对象将您的 data 参数字符串化,以将您的 JS 对象字符串化为 JSON 格式的字符串。 (旧版浏览器可能没有这个内置对象,这种情况下使用json2.js添加)
  3. contentType 设置为 application/json。这基本上表明请求体属于这种类型......这是因为我们只是将其字符串化为 JSON。

【讨论】:

  • 为什么我需要对我的初始对象进行字符串化?
  • 将您的 JavaScript 对象序列化为 JSON 格式的字符串是将复杂数据发送到服务器的最佳方式(部分意见)。
  • 好吧,但是发送对象也可以,为什么我不能在没有 stringyfiying 的情况下发送对象内的对象?我用图片更新了问题
  • 通过 HTTP 发送的数据必须是平面的(序列化)。 JSON 经常被使用,因为它可以让你序列化复杂的对象。然后,您可以轻松地在服务器上反序列化。如果你“字符串化”你的过滤器对象,它应该毫无问题地通过电线。
  • 这样可以让参数显示出来,但现在对象总是空的.. 呵呵!
【解决方案2】:

尝试指定您的filters
例如在尝试: jsonfilter = JSON.stringify(filters);
如果你使用 MVC 和 ASP.Net 你可以试试 在您的 HTTPWebMethode 有一个 jsonResult 作为 Return 时,您可以尝试指定参数

  public JsonResult myPostMethode(string script,object page,List<object> filters){

    //make some usefull 
    var model = script;
    return(model,JsonRequestBehavior.AllowGet);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多