无法通过AJAX将JSON作为字符串发送
所以我试图将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
包含原始forms作为JSON数据:
应用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脚本:
现在我想后端的$ _POST现在应该包含这个:
array(’ajaxidate’=>“[{\”name \“:\”name \“,\”type \“:\”multialphanumslug \“,\”value \“:\”AD \“},{\”名\ “:\” 服务器\”,\ “类型\”:\ “宿主\”,\ “值\”:\ “10.1.1.1 \”},{\ “名称\”:\ “端口\”, \ “类型\”:\ “号码\”,\ “值\”:\ “8080 \”},{\ “名称\”:\ “AUTHID \” \ “类型\”:\ “用户名\”, \“价值\”:\“barryallen \”}]“);
但它没有收到任何东西。 这是捕获的请求:
后端的回应?
我尝试使用POSTMan,我收到了预期的正确输出:
那太荒谬了。
我坚持了两天,试图弄清楚发生了什么或者我错过了什么。 任何帮助将不胜感激。
您需要解析服务器上的数据:
$myArray = json_decode($_POST['ajaxidate']); var_dump($myArray);
考虑一下:
输出:
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... } });
正如你在你的ajax
调用中提到的dataType: json
调用数据需要在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 } });
谢谢所有帮助过的人。 祝你有美好的一天