0

我正在使用我自己创建的 API,我正在与之通信,我的代码如下。如果一切正常,API 将返回 json 以及标头“200 OK”。但是,如果连接断开,我会返回“502 Bad Gateway”作为标题。

到目前为止,'CURLOPT_HEADER' 在我的 php 脚本(见下文)中已设置为 false,但现在我已将其设置为 true,以便我可以接收标题并根据标题执行操作。在这里我需要帮助。

实际上,我有两件事需要帮助(它们是相互关联的):

  1. 如果我的 API 和源之间的连接正常,并且我在我的 php 脚本(如下所示)中将 CURLOPT_HEADER 设置为 false,那么一切都按预期工作。但是,如果我将其设置为 true,则实际的标头也会与 ajax 请求一起发回,这会返回错误:“Uncaught SyntaxError: Unexpected token H”(下面 js 代码中的第 10 行)。

  2. 如果我的 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.  });
4

1 回答 1

1

您可以使用 curl_errno 检查您的 API 如何响应您的请求,您也可以尝试使用 API“状态标志”来避免 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);
    }
});
于 2013-02-19T13:08:16.733 回答