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

好的,经过 8 小时的测试和试验。我终于得到了这个工作。非常感谢维陶塔斯。他教会了我很多。主要是如何调试。

对于想要使用 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 中做错了两件事。我应该使用$_GET['location']而不是$location另一个是$response而不是使用第二个变量。

和 js 功能:

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

我在 js 中做错的另一件事是将回调传递给函数。我应该使用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 回答