2012-05-03 3 views
1

Первый раз, пытаясь использовать JSON. Вот мой checklink.php:PHP-JSON: Проверьте неработающие ссылки

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 запроса.

Редактировать: Обратите внимание, что я забыл установить завиток и включить его на своем сервере. Надеюсь, никто не пропустит это.

+1

вы не возвращает результат на всех, кроме истинно или ложно? где json? – thecodeparadox

+0

@thecodeparadox Я не понимаю, что вы пытаетесь спросить. Я не знаю, что делать на стороне php и json. Что вы имеете в виду, где находится json? – xperator

+0

Попробуйте использовать инструменты debbugging, такие как инструмент для разработчиков firebug или chrome. – Vytautas

ответ

1

ОК После выполнения теста и испытания в течение 8 часов. Наконец, я получил эту работу. Большое спасибо Vytautas. Он много меня учил. В основном, как отлаживать.

Для тех, кто хочет проверить неработающие ссылки с помощью JSON + PHP + CURL:

  1. Прежде всего, проверьте, если у вас есть локон установлен и включен на сервере.
  2. Те, кто не понимает завиток: если есть ответ с вашего 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) 

я делаю 2 вещи неправильно в PHP. Я должен был использовать $_GET['location'] вместо $location А другой был $response вместо использования второй переменной.

И функция ЯШ:

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'); 
     }); 
1

Вы должны изменить $rr = url_exists($response['location']); к

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

, чтобы получить ответ JSon, как вы ожидаете

0
$rr = url_exists($response['location']); 
echo json_encode(array('status' => $rr)); 

И попробуйте это:

UrlExistsNew($(this).val(), function(status){ 
    if(!status) $(element).css('background-color','#FC0'); 
}); 
+0

Все еще не работает. – xperator

+0

Пробовал ваше обновление. Все еще не работает. Я думаю, что чего-то не хватает. Когда я поставил точку останова в '$ .getJSON ('checklink.php', {location: url}, function (data) {' Он останавливается, но не на 'callback.apply (null, data.status);' линия – xperator