使用ajax发送复杂数据的最佳策略是什么?

时间:2013-01-24 14:40:09

标签: javascript ajax json jquery

我在表单中有一些信息可以用JS / jQuery作为(复杂)数组(或者你喜欢的对象)发送到服务器。 (jQuery 1.7.2) 我正在考虑使用JSON来巧妙地解决问题。我的代码现在正常工作,但我想知道它是否可以做得更好。

所以这个例子很典型(数据更复杂):

dataSend = { 'id': '117462', 'univers': 'galerie', 'options' : { 'email': 'hello@world.com', 'commenataire': 'blabla', 'notation' : '4' } };

$.ajax({
  url: "/ajax/ajaxMavilleBox.php",
  data: JSON.stringify(dataSend),
  success: function(x){
      smth();
  }
});

在另一个上下文中,我必须在没有JSON的情况下完全相同。

使用相同的例子:

dataSend = { 'id': '117462', 'univers': 'galerie', 'options' : { 'email': 'hello@world.com', 'commenataire': 'blabla', 'notation' : '4' } };

$.ajax({
    url: "/ajax/ajaxBox.php",
    data: $.param(dataSend),
    success: function(x){
        smth();
    }
});

显然,我错过了一些东西。

网址是:

http://www.mywebsite.com/ajax/ajaxBox.php?id=117462&univers=galerie&options=%5Bobject+Object%5D

网址应为:

http://www.mywebsite.com/ajax/ajaxBox.php?id=117462&univers=galerie&options[email]=hello@world.com&options[commenataire]=blabla&options[notation]=3

有任何简单的方法(我希望我不必在循环中自行编辑数据)

编辑:第二部分的解决方案

好的,没有JSON的最后一部分是正确的。事实上,我在我的页面中使用了旧版本的jQuery。 jQuery< .param不太好用。 1.4

此处提供更多信息Param Doc

2 个答案:

答案 0 :(得分:3)

我建议设置type: 'POST',否则您将拥有浏览器查询字符串长度的数据限制。

如果使用post方法,则应将数据作为json-string发送。类似的东西:

data: { DTO: JSON.stringify(dataSend) }

如果未定义window.JSON,则需要使用json2.js(例如,在ie7中)。

如果您在服务器端使用PHP,则可以使用以下方式获取对象:

$data = json_decode($_POST['DTO']); //will return an associative array

或ASP.NET

public class DataSctructure
{
    public string id { get; set; }
    public string univers { get;set; }
    //etc...
}

var data = HttpContext.Current.Request.Form['DTO'];

DataSctructure ds = new JavaScriptSerializer().Deserialize<DataSctructure>(data);

//properties are mapped to the ds instance, do stuff with it here

答案 1 :(得分:0)

@Johan POST提到的

应该在这里使用,而不是GET 您可以使用浏览器中的开发人员选项查看您要发送的数据,只需按f12
即可 还要确保使用jquery >= 1.4
url中错误的序列化字符串是$.param()在1.4版本之前用于序列化的方式