Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery:如何停止AJAX函数转义用于发布数据的JSON字符串_Javascript_Php_Jquery_Json_Ajax - Fatal编程技术网

Javascript jQuery:如何停止AJAX函数转义用于发布数据的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

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

{"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']));