我从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?
答案 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的结果添加一些更好的处理,以防呼叫失败,但希望这会让你走上正确的轨道