小编典典

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

ajax

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

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

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

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

alert()在AJAX函数中使用JSON字符串之前,我已经测试过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);
       }
    }
});

阅读 299

收藏
2020-07-26

共1个答案

小编典典

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

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

2020-07-26