我正在使用我自己创建的API,我正在与之通信,我的代码如下。如果一切正常,API返回json,以及标题'200 OK'。但是,如果连接断开,我将'502 Bad Gateway'作为标题返回。
到目前为止,'CURLOPT_HEADER'已在我的php脚本中设置为false(见下文),但现在我已将其设置为true,以便我可以接收标头并根据标头采取操作。在这里,我需要帮助。
如果我的API与源之间的连接正常,我在我的php脚本(见下文)中将CURLOPT_HEADER设置为false,一切正常。但是,如果我将其变为true,则实际标头也会以ajax请求发回,这会返回错误:“Uncaught SyntaxError:Unexpected token H”(下面js代码中的第10行)。
< / LI>如果我的API与源之间的连接断开,我对如何处理错误没有任何线索,因此API返回'502 Bad Gateway'。我希望php脚本使用ajax请求发回该信息,因此可以在js文件中处理。
所以,请帮帮我。提前谢谢!
PHP:
$url = 'http://theurl.com';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
$response = curl_exec($ch);
if(!$response) {
// <--- ??
}
curl_close($ch);
echo json_encode($response);
JS:
1. $.ajax({
2. url:'./php/apihandling.php',
3. type:'post',
4. dataType:'json',
5. data:{
6. data: data
7. },
8. success: function(data) {
9. var content = JSON.parse(data);
10. console.log(content);
11. },
12. error: function (xhr, ajaxOptions, thrownError) {
13. console.log(xhr.status);
14. console.log(thrownError);
15. }
16. });
答案 0 :(得分:1)
您可以使用curl_errno检查您的API如何响应您的请求,您也可以尝试使用API&#34;状态标记&#34;避免JQuery中的错误
...
// Check if any error occurred
if(!curl_errno($ch))
{
$info = curl_getinfo($ch);
//close the connection
curl_close($ch);
$result["API_status"]=0;
$result["error"]=$info;
//kill the script and echo the json
die(json_encode($result));
}
else
{
$result["API_status"]=1;
curl_close($ch);
$result["response"]=$response;
echo json_encode($result);
}
现在让我们尝试一下你的jquery脚本
$.ajax({
url: './php/apihandling.php',
type: 'post',
dataType: 'json',
data: {
data: data
},
success: function(data) {
//no need for this, datatype is json already
//var content = JSON.parse(data);
if (data["API_status"]) {
alert("wow API is up and healthy");
//do some stuff with the json
$.each(data["response"], function(index, value) {
//loop this
});
} else {
alert("Oh, no. RIP API");
console.log(data["error"]);
}
},
error: function(xhr, ajaxOptions, thrownError) {
console.log(xhr.status);
console.log(thrownError);
}
});