0

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

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

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。$.param 对于 jQuery < 1.4 不是很好

更多信息在这里参数文档

4

2 回答 2

3

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

如果使用 post 方法,则应将数据作为 json 字符串发送。就像是:

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

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

如果您在服务器端使用 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
于 2013-01-24T14:45:49.297 回答
0

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

于 2013-01-24T14:51:50.690 回答