tic*_*ian 12 javascript php ajax jquery json
我需要将表单中的所有输入序列化为JSON字符串.
在这篇文章的帮助下,我可以成功创建一个有效的字符串,如下所示:
{"input01":"value01","input02":"value02","input03":"value03"}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用jQuery的Ajax函数将字符串用于POST数据时,似乎在字符串中添加了反斜杠,导致使用GET而不是POST发送JSON字符串.加载的PHP页面返回一个$_GET数组:
[{\"input01\":\"value01\",\"input02\":\"value02\",\"input03\":\"value03\"}] =>
Run Code Online (Sandbox Code Playgroud)
alert()在使用AJAX函数之前,我已经测试了JSON字符串,以确认结构是否正确.
此外,如果我只是手动输入有效的JSON字符串,AJAX会正确发布数据.
我的代码如下:
var dataJSON = $.toJSON($('#form').serializeObject());
alert(dataJSON);
$.ajax({
type: "POST",
url: "ajax.php",
data: 'Query01=01&Query02=02',
dataType: 'json',
success: function(data){
if (data==1){
$('#wrap').load('ajax.php',dataJSON);
}
}
});
Run Code Online (Sandbox Code Playgroud)
cle*_*tus 11
这是默认行为$.ajax().您可以通过将processData选项设置为来更改它false.见$.ajax()选项.
Run Code Online (Sandbox Code Playgroud)data Object, String要发送到服务器的数据.如果不是字符串,它将转换为查询字符串.它附加到GET请求的URL.请参阅processData选项以防止此自动处理.对象必须是键/值对.如果value是一个数组,则jQuery使用相同的键序列化多个值,即{foo:["bar1","bar2"]}变为'&foo = bar1&foo = bar2'.
和
Run Code Online (Sandbox Code Playgroud)processData Boolean Default: true默认情况下,作为对象传入数据选项的数据(技术上,不是字符串)将被处理并转换为查询字符串,适合默认内容类型"application/x-www-form-urlencoded" .如果要发送DOMDocuments或其他未处理的数据,请将此选项设置为false.
在搜索 Google 和 jQuery 网站后,我得出个人结论,该$.load函数将转换作为查询字符串传递给它的任何变量(正如我上面概述的原始问题)。如果您希望通过它传递 JSON 字符串,则必须手动输入该字符串。
为了解决这个问题,我使用了低级$.ajax函数。使用此方法的一个优点是我还可以使用标准.serialize()函数发送 POST 数据,而不必将表单数据转换为 JSON。
我的最终代码:
var formData = $('#form').serialize();
$.ajax({
type: "POST",
url: "ajax.php",
data: 'Query01=01&Query02=02',
dataType: 'json',
success: function(data){
if (data==1){
$.ajax({
type: "POST",
url: "ajax.php",
data: formData,
success: function(html){
$("#wrap").replaceWith(html);
}
});
}
}
});
Run Code Online (Sandbox Code Playgroud)
如果其他人有解决方案,请评论。
| 归档时间: |
|
| 查看次数: |
18054 次 |
| 最近记录: |