2

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

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

在此处输入图像描述

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

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

4

2 回答 2

4

试试这个:

$.ajax({
  type: 'POST',
  data: JSON.stringify({
    script: 'search',
    page: page,
    filters: filters
  }),
  contentType: 'application/json'
});
  1. 将类型从更改GETPOST。这将允许您发送请求正文。
  2. 使用内置 JSON 对象将您的数据参数字符串化,以将您的 JS 对象字符串化为 JSON 格式的字符串。(旧的浏览器可能没有这个内置对象,在这种情况下,使用json2.js添加它)
  3. contentType设置为application/json. 这基本上表明请求体属于这种类型......这是因为我们只是将其字符串化为 JSON。
于 2013-07-11T17:58:05.380 回答
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);
}
于 2013-07-11T18:17:51.443 回答