Jquery ajax:数据对象中的对象

时间:2013-07-11 17:53:21

标签: javascript ajax json object

我需要在数据对象中传递一个对象,但它无法正常工作

我使用我在这个网站上找到的以下函数,非常有用,将表单数据转换为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){
    }
});

enter image description here

了解图片中缺少“过滤器”

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

2 个答案:

答案 0 :(得分:4)

请改为尝试:

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

答案 1 :(得分:0)

尝试指定您的filters
例如在try中: 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);
}