Javascript jQuery:如何停止AJAX函数转义用于发布数据的JSON字符串
我需要将表单中的所有输入序列化为JSON字符串。Javascript jQuery:如何停止AJAX函数转义用于发布数据的JSON字符串,javascript,php,jquery,json,ajax,Javascript,Php,Jquery,Json,Ajax,我需要将表单中的所有输入序列化为JSON字符串。 在的帮助下,我可以成功创建一个有效字符串,如下所示: {"input01":"value01","input02":"value02","input03":"value03"} 但是,当我尝试使用jQuery的Ajax函数使用字符串来发布数据时,它似乎在字符串中添加了反斜杠,导致JSON字符串使用GET而不是POST发送。 加载的PHP页面返回以下内容的$\u GET数组: [{\"input01\":\"value01\",\"input02
在的帮助下,我可以成功创建一个有效字符串,如下所示:
{"input01":"value01","input02":"value02","input03":"value03"}
但是,当我尝试使用jQuery的Ajax函数使用字符串来发布数据时,它似乎在字符串中添加了反斜杠,导致JSON字符串使用GET而不是POST发送。
加载的PHP页面返回以下内容的$\u 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);
}
}
});
这是的默认行为。您可以通过将
processData
选项设置为false
来更改它。看
要发送到服务器的数据。它是
已转换为查询字符串(如果不是)
已经是一串了。它被附加到
获取请求的url。请参阅processData
选项,以防止自动执行此操作
处理。对象必须是键/值
对。如果值是数组,则jQuery
用相同的值序列化多个值
键,即{foo:[“bar1”,“bar2”]}
变成“&foo=bar1&foo=bar2”
及
默认情况下,数据传递到数据中
作为对象的选项(技术上,
除字符串以外的任何内容)都将
处理并转换为查询
字符串,适用于默认值
内容类型
“application/x-www-form-urlencoded”。
如果要发送文档,或
其他未处理的数据,设置此
选项为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);
}
});
}
}
});
如果其他人有解决方案,请发表评论 请确保
echo $_GET['varwithurl']
不是
就像许多php web示例一样
我使用$.ajax()发送带有url的数据,并且在php脚本中没有看到不需要的反斜杠。
<html>
<head>
<script src="resources/jquery-2.1.0.js"></script>
<script src="resources/jquery.serializejson.min.js"></script>
</head>
<body>
<script>
$(document).ready(function(){
$("#simplepost").click(function(e){
var MyForm = $("#appForm").serializeJSON();
console.log(MyForm);
$.ajax(
{
url: "rest/emp/create",
type: "POST",
data: JSON.stringify(MyForm),
contentType: "application/json; charset=utf-8",
dataType: "json",
success:function(maindta){
alert(maindta);
},
error: function(jqXHR, testStatus, errorThrown){
alert(errorThrown);
}
});
e.preventDefault(); //STOP default action
});
});
</script>
<h2>Hello World!</h2>
<form id="appForm" method="POST">
EmployeeID:<input type="text" name='id' value="" />
Employee Name:<input type="text" name="name" value=""/>
<br>
<input type="button" value="Submit" id="simplepost" />
</form>
</body>
</html>
$(文档).ready(函数(){
$(“#simplepost”)。单击(函数(e){
var MyForm=$(“#appForm”).serializeJSON();
console.log(MyForm);
$.ajax(
{
url:“rest/emp/create”,
类型:“POST”,
数据:JSON.stringify(MyForm),
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
成功:功能(maindta){
警报(maindta);
},
错误:函数(jqXHR、testStatus、errorshown){
警报(错误抛出);
}
});
e、 preventDefault();//停止默认操作
});
});
你好,世界!
雇员ID:
员工姓名:
我这样做是为了在php端使用条带斜杠
大概是这样的:
$data = json_decode(stripslashes($_POST['json_data']));
我已经测试了你上面列出的信息,没有任何运气。在我看来,$.ajax选项不会影响嵌套的$.load函数。关于如何更改$.load的相同选项,您有什么想法吗?@Ticalian我不知道您为什么需要success函数中的load函数。您是否可以使用json值在$.ajax请求中获取所需的所有内容?processData:false
没有返回您调用的任何内容.ajax()
,然后使用.load()
发出另一个ajax请求。对吗?罗汀,对。上面的例子是根据我的实际脚本简化的。实际脚本使用需要验证的$.ajax发布数据,如果验证成功,$.load函数将加载从JSON字符串发布的数据生成的HTML。没有解释的代码转储很少有帮助。请考虑在你的答案中添加一些上下文,因为你使用PHP作为服务器端。我想,您可以使用php函数stripslashes()
echo json_encode($_GET['varwithurl'])
<html>
<head>
<script src="resources/jquery-2.1.0.js"></script>
<script src="resources/jquery.serializejson.min.js"></script>
</head>
<body>
<script>
$(document).ready(function(){
$("#simplepost").click(function(e){
var MyForm = $("#appForm").serializeJSON();
console.log(MyForm);
$.ajax(
{
url: "rest/emp/create",
type: "POST",
data: JSON.stringify(MyForm),
contentType: "application/json; charset=utf-8",
dataType: "json",
success:function(maindta){
alert(maindta);
},
error: function(jqXHR, testStatus, errorThrown){
alert(errorThrown);
}
});
e.preventDefault(); //STOP default action
});
});
</script>
<h2>Hello World!</h2>
<form id="appForm" method="POST">
EmployeeID:<input type="text" name='id' value="" />
Employee Name:<input type="text" name="name" value=""/>
<br>
<input type="button" value="Submit" id="simplepost" />
</form>
</body>
</html>
$data = json_decode(stripslashes($_POST['json_data']));