1

初めて JSON を使用しようとしています。ここに私の checklink.php があります:

function url_exists($url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_NOBODY, true);
    curl_exec($ch);
    $retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    // $retcode > 400 -> not found, $retcode = 200, found.
    if ($retcode == 400){
    return "false";
    }else{
    return "true";
    }
    curl_close($ch);
}
$response = array( 
  'location' => $location, 
  'status' => $status 
);
$rr = url_exists($response['location']);
echo json_encode( $rr );

JS部分:

function UrlExistsNew(url, callback) {
  $.getJSON('checklink.php', { location: url }, function ( data ) {
  callback.apply( null, data.status );
});
}
...
UrlExistsNew($(this).val(), function(status){
        if(status === "false") $(element).css('background-color','#FC0');
      }); 
...

PHPページがjsonクエリに結果を返していないようです。

編集:curlをインストールしてサーバーで有効にするのを忘れたことに注意してください。誰もこれを見逃さないことを願っています。

4

3 に答える 3

1

次のように変更する必要があり$rr = url_exists($response['location']);ます

$rr = array("status"=>url_exists($response['location']));

期待どおりにjson応答を取得するには

于 2012-05-03T07:26:01.487 に答える
1

OK、テストと試行を 8 時間行った後。私はついにこれを機能させました。Vytautasに感謝します。彼は私にたくさんのことを教えてくれました。主にデバッグ方法。

JSON + PHP + CURL を使用して壊れたリンクをチェックしたい人のために:

  1. まず、サーバーにcurlがインストールされ、有効になっているかどうかを確認します。
  2. curl がわからない方へ : URL からの応答がある場合、ステータス コード (200 や 404 など) が表示されます。入力した URL が空白、無効、またはそのようなものである場合、ステータス コード 0 が返されます。
  3. PHP ページから適切な応答が得られない場合は、FireBug (コンソール タブ) を使用してヘッダーと応答を確認します。また、ブレークポイントを使用して、変数が正しく渡されているかどうかを確認します。

PHPコードは次のとおりです。

function url_exists($url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_NOBODY, true);

    if(curl_exec($ch) === false) // These 2 line here are for debugging.
        die('Curl error: ' . curl_error($ch));

    $retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    return $retcode;
}
$response = array(
  'status' => url_exists($_GET['location'])
);
echo json_encode($response)

私はphpで2つのことを間違っていました。私は$_GET['location']代わりに使用する必要があり$location、もう1つは$response2番目の変数を使用する代わりでした。

そしてjs関数:

function UrlExistsNew(url, callback) {
  $.getJSON('checklink.php', { location: url }, function ( data ) {
  callback.call( null, data.status );
});
}

私がjsで間違っていたもう1つのことは、コールバックを関数に渡すことでした。callback.call代わりに使用する必要がありましたcallback.apply

簡単な使い方:

UrlExistsNew($(this).val(), function(status){
        if(status === 404) $(element).css('background-color','#FC0');
      }); 
于 2012-05-03T15:25:35.993 に答える
0
$rr = url_exists($response['location']);
echo json_encode( array('status' => $rr) );

そしてこれを試してください:

UrlExistsNew($(this).val(), function(status){
   if(!status) $(element).css('background-color','#FC0');
}); 
于 2012-05-03T07:27:35.450 に答える