2012-05-03 102 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

OK,做試驗後並試用8個小時。我終於得到了這個工作。非常感謝Vytautas。他教了我很多。主要是如何調試。

的人誰願意來檢查使用JSON + PHP +捲曲損壞的鏈接:

所有的
  1. 首先,檢查你是否有捲曲安裝在你的服務器中啓用。
  2. 這些誰不明白卷曲:如果從您的網址迴應,會有一個狀態代碼(如200或404)。如果輸入的網址是空的,無效的或類似的東西,它會返回狀態碼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而是採用了第二個變量。

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

你應該改變$rr = url_exists($response['location']);

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

如您所願

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

得到JSON響應,並嘗試這個辦法:

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