尝试回显到AJAX时,json_encode返回NULL

时间:2015-04-04 22:12:58

标签: php ajax json

我从Web API获得了JSON格式的响应。当我尝试对响应进行json_encode并将其回显给AJAX时,它会在AJAX端给出一个null响应。

PHP:

$ch = curl_init();

    curl_setopt($ch,CURLOPT_URL,$theurl);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($ch,CURLOPT_HEADER, false);   

    if(is_callable('curl_init')){
       echo "Enabled<br/>";
    }
    else
    {
       echo "Not enabled";
    }

    // Send the request & save response to $resp

    GLOBAL $resp;

    $resp = curl_exec($ch);
var_dump($resp);
//displays: string(221) "{"year": 2011, "type": "movie", "format": "BluRay",     "releaseGroup": "BKZ", "title": "A Dangerous Method", "screenSize": "480p", "videoCodec": "XviD", "mimetype": "video/x-msvideo", "container": "avi", "audioCodec": "AC3"}" "{\"year\": 2011, \"type\": \"movie\", \"format\": \"BluRay\", \"releaseGroup\": \"BKZ\", \"title\": \"A Dangerous Method\", \"screenSize\": \"480p\", \"videoCodec\": \"XviD\", \"mimetype\": \"video\/x-msvideo\", \"container\": \"avi\", \"audioCodec\": \"AC3\"}"

echo json_encode($resp);

AJAX:

$.ajax({
            url : 'includes/file_uploader.php', // requesting a PHP script
            dataType : 'json',
            success : function (data) { // data contains the PHP script output

               alert(data);

               console.log(data);
            },
            error: function (data) {
                alert(data);

               console.log(data);
            }
        })

echo之前的var_dump显示了所有正确的东西。为什么我一直在AJAX端获得null?

1 个答案:

答案 0 :(得分:1)

您需要确保脚本返回的唯一内容是格式化的JSON字符串,因为您告诉javascript这是您期望的响应类型。在您的PHP脚本中,您有几个调试信息,导致您的响应不仅仅是一个json字符串。另外,如果您已经从正在进行curl调用的服务器中检索json_encoded字符串,则不希望对该字符串进行重新编码,因为它已经格式化了。

您可能想要做的是:

摆脱这段代码:

if(is_callable('curl_init')){
echo "Enabled<br/>";
}
else
{
   echo "Not enabled";
}

curl_init应始终可调用,因为它是基本的php函数。然后删除你的var_dump和$ resp变量的json编码,然后打印出响应。你的最终剧本可能会归结为:

$ch = curl_init();

curl_setopt($ch,CURLOPT_URL,$theurl);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_HEADER, false);   

echo curl_exec($ch);

最终你可能应该为curl_exec的结果添加一些更好的处理,以防呼叫失败,但希望这会让你走上正确的轨道