我需要将所有输入从表单序列化为JSON字符串。 借助本文,我可以成功创建一个有效的字符串,如下所示:
{"input01":"value01","input02":"value02","input03":"value03"}
但是,当我尝试使用字符串通过jQuery的Ajax函数发布数据时,似乎在字符串中添加了反斜杠,从而导致使用GET而不是POST发送JSON字符串。加载的PHP页面返回以下$_GET数组:
$_GET
[{\"input01\":\"value01\",\"input02\":\"value02\",\"input03\":\"value03\"}] =>
alert()在AJAX函数中使用JSON字符串之前,我已经测试过JSON字符串以确认结构正确。 另外,如果我只是手动输入有效的JSON字符串,则AJAX会正确发布数据。
alert()
我的代码如下:
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); } } });
在搜索Google和jQuery网站之后,我个人得出结论,该$.load函数将转换作为查询字符串传递给它的任何变量(正如上面概述的我的原始问题)。如果您希望通过它传递JSON字符串,则必须手动输入。
$.load
为了解决这个问题,我改用了低级$.ajax函数。使用此方法的优势意味着我也可以使用标准.serialize()函数发送POST数据,而不必将表单数据转换为JSON。
$.ajax
.serialize()
我的最终代码:
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); } }); } } });
如果其他人有解决方案,请发表评论。