无法通过AJAX

时间:2015-11-16 06:47:35

标签: javascript php jquery json 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'=&gt; “[{\” 名称\ “:\” 名称\ “\ ”类型\“:\ ”multialphanumslug \“,\ ”值\“:\ ”AD \“},{\ ”名称\“:\” 服务器\” \ “类型\”:\ “宿主\”,\ “值\”:\ “10.1.1.1 \”},{\ “名称\”:\ “端口\” \ “类型\”:\ “号码\”,\ “值\”:\ “8080 \”},{\ “名称\”:\ “AUTHID \” \ “类型\”:\ “用户名\”,\ “值\”:\ “贝瑞·艾伦\”}]” );

但它没有收到任何东西。这是捕获的请求:

enter image description here

来自后端的回复?

enter image description here

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

enter image description here

现在这太荒谬了。

我被困在这两天,试图弄清楚发生了什么或我错过了什么。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

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

$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...
   }
});

答案 1 :(得分:0)

正如你在public void changeImage() { Log.d("debug1", "" + getCurrentScene().getNumChildren()); ArrayList<Object3D> objectList = getCurrentScene().getChildrenCopy(); Material material = objectList.get(0).getMaterial(); for (ATexture texture : material.getTextureList()) { material.removeTexture(texture); texture = null; } Texture t = new Texture("sphereTexture",R.drawable.newImage); t.shouldRecycle(true); try { material.addTexture(t); } catch (Exception e){e.printStackTrace();} } 中提到dataType: json一样,调用数据需要使用json格式,但是使用ajax将Json对象转换为json字符串,因为make问题需要更改

JSON.stringify

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

removeClass

答案 2 :(得分:0)

解决了我自己的问题。让@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
    }
});

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