2013-07-11 58 views
2

我需要将数据对象中传递一个对象,但它不工作jQuery的AJAX:在数据对象的对象

我用下面的函数我在这个非常网站,很实用,表单数据转换成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

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

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

+0

为什么会倒下投票? –

+1

您使用此serializeObject函数而不是JSON.stringify()的任何特定原因? – Jon

回答

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. 设置的contentTypeapplication/json。这基本上表明request-body是这种类型的......这是因为我们只是将它串化为JSON。
+0

为什么我需要将我的初始对象串起来? –

+0

将JavaScript对象序列化为JSON格式的字符串是将复杂数据发送到服务器的最佳方式(部分意见)。 –

+0

嗯,但发送对象的作品也是如此,为什么我不能在对象中发送一个对象而没有stringyfiying?我用图片更新了这个问题 –

0

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

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

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