0

以下のコードを使用して、自分で作成した API と通信しています。すべてが正常に機能する場合、API は json とヘッダー '200 OK' を返します。ただし、接続が切断されている場合は、ヘッダーとして「502 Bad Gateway」を返します。

これまで、'CURLOPT_HEADER' は私の php スクリプトで false に設定されていましたが (以下を参照)、今は true に設定して、ヘッダーを受け取り、ヘッダーに応じてアクションを実行できるようにしました。ここで助けが必要です。

私は実際に助けが必要な2つのことを持っています(これらは互いに関連しています):

  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 に答える