繁体   English   中英

无法通过 AJAX 将 JSON 作为字符串发送

[英]Can't send JSON as string via AJAX

所以我试图将 JSON 作为字符串发送。 然后我有一个 PHP 后端,它检索这个 JSON 字符串并使用json_decode解析它。

不幸的是,我无法将此 JSON 作为字符串发送。

这是我使用的 jQuery Ajax 脚本:

var jsonString = JSON.stringify(checkables);
console.log(jsonString);

$.ajax({
    url: $url,
    type: 'POST',
    data: {ajaxidate: JSON.stringify(jsonString)},
    contentType: "application/json; charset=UTF-8",
    success: function (data)
    {
        // just successful callback
    },
    error: function ()
    {
        // just error callback
    }
});

变量checkables包含原始形式作为 JSON 数据: checkables_data

应用JSON.stringify() ,它现在是这样的: [{"name":"name","type":"multialphanumslug","value":"AD"},{"name":"server","type":"host","value":"10.1.1.1"},{"name":"port","type":"number","value":"8080"},{"name":"authid","type":"username","value":"barryallen"}]

在后端,我有这个 PHP 脚本:

<?php
    var_dump($_POST);
    die();
?>

现在我想后端的 $_POST 现在应该包含这个:

数组('ajaxidate' => "[{\\"name\\":\\"name\\",\\"type\\":\\"multialphanumslug\\",\\"value\\":\\"AD\\"},{\\"名称\\":\\"服务器\\",\\"类型\\":\\"主机\\",\\"值\\":\\"10.1.1.1\\"},{\\"名称\\":\\"端口\\", \\"type\\":\\"number\\",\\"value\\":\\"8080\\"},{\\"name\\":\\"authid\\",\\"type\\":\\"username\\", \\"value\\":\\"barryallen\\"}]" );

但它什么也没收到。 这是捕获的请求:

在此处输入图片说明

来自后端的响应?

在此处输入图片说明

我尝试使用 POSTMan 并收到了预期的正确输出:

在此处输入图片说明

现在这太荒谬了。

我坚持了 2 天,试图弄清楚发生了什么或我错过了什么。 任何帮助将不胜感激。

您需要解析服务器上的数据:

$myArray = json_decode($_POST['ajaxidate']);
var_dump($myArray);

考虑一下:

<?php
    $a = '[{"a": 1}]';
    $b = json_decode($a);
    var_dump($a);
    var_dump($b);
?>

输出:

string(10) "[{"a": 1}]"
array(1) {
  [0]=>
  object(stdClass)#1 (1) {
    ["a"]=>
    int(1)
  }
}

dataType: 'json' , tldr: 使用它!

当设置 dataType = json 时,你告诉 jQuery 来自服务器的响应应该被解释为 JSON,因此它会为你解析它并将解析的对象/数组作为成功回调的第一个参数:

$.ajax({
   // ...
   dataType: 'json',
   success: function(myJson) {
     console.log(myJson); // this will be a JSON object/array...
   }
});

正如您提到的dataType: json在您的ajax调用数据中需要采用 json JSON.stringify但使用JSON.stringify将 Json 对象转换为 json 字符串,该字符串存在 make 问题,您需要更改

 `var jsonString = JSON.stringify(checkables);`

 var jsonString = checkables;

JSON.stringify()

解决了我自己的问题。 @Munna 建议使用 $.post() 使我想出消除不必要的方法。 在这种情况下,不必要的是 $.ajax() 中的contentType选项。

这是更新的工作解决方案:

$.ajax({
    url: $url,
    type: 'POST',
    data: {ajaxidate: JSON.stringify(jsonString)},
    success: function (data)
    {
        // just successful callback
    },
    error: function ()
    {
        // just error callback
    }
});

感谢所有帮助过的人。 祝你有美好的一天

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM