我在表单中有一些信息可以用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
答案 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)
POST
提到的应该在这里使用,而不是GET
您可以使用浏览器中的开发人员选项查看您要发送的数据,只需按f12
即可
还要确保使用jquery >= 1.4
url中错误的序列化字符串是$.param()
在1.4版本之前用于序列化的方式