jQuery:如何阻止AJAX函数转义用于POST数据的JSON字符串

我需要将表单中的所有输入序列化为JSON字符串。
在这篇文章的帮助下,我可以成功创建一个有效的字符串,如下所示:

{"input01":"value01","input02":"value02","input03":"value03"} 

但是,当我尝试使用jQuery的Ajax函数将字符串用于POST数据时,它似乎在字符串中添加反斜杠,导致使用GET而不是POST发送JSON字符串。 加载的PHP页面返回$_GET数组:

 [{\"input01\":\"value01\",\"input02\":\"value02\",\"input03\":\"value03\"}] => 

在使用AJAX函数之前,我已使用alert()测试了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); } } }); 

这是$.ajax()的默认行为。 您可以通过将processData选项设置为false来更改它。 请参阅$.ajax()选项 。

 data Object, String 

要发送到服务器的数据。 如果不是字符串,它将转换为查询字符串。 它附加到GET请求的URL。 请参阅processData选项以防止此自动处理。 对象必须是键/值对。 如果value是一个数组,则jQuery使用相同的键序列化多个值,即{foo:[“bar1”,“bar2”]}变为’&foo = bar1&foo = bar2’。

 processData Boolean Default: true 

默认情况下,作为对象传入数据选项的数据(技术上,不是字符串)将被处理并转换为查询字符串,适合默认内容类型“application / x-www-form-urlencoded” 。 如果要发送DOMDocuments或其他未处理的数据,请将此选项设置为false。

一定要你

 echo $_GET['varwithurl'] 

 echo json_encode($_GET['varwithurl']) 

尽可能多的php网络示例。

我使用$.ajax()发送带有url的数据,并且在php脚本中看不到不需要的反斜杠。

在搜索谷歌和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); } }); } } }); 

如果其他人有解决方案,请发表评论。

我这样做是为了在php端使用stripslashes

像这样的东西:

 $data = json_decode(stripslashes($_POST['json_data'])); 
        

Hello World!

EmployeeID: Employee Name: