2015-02-23 136 views
0

從PHP腳本請求JSON:通過AJAX請求PHP腳本。 Ajax請求返回實際的PHP腳本

var channelList; 

$(document).ready(function() { 
    $.ajax({  
     url: 'channellookup.php',  
     dataType: 'json',  
     error: function(){console.log(arguments)},  
     success: function(data) { 
      console.log(data.success); 
      channelList = data; 
     } 
    }); 
}); 

現在到了有趣的部分:在控制檯中的錯誤信息內容是這樣的:

Arguments { 0: XMLHttpRequest, 1: "parsererror", 2: "Invalid JSON: <?php 
    header('Content-type: application/json');  // To ensure output json type. 
    class MyDB extends SQLite3 
    { 

等。 我的整個PHP代碼都在這個消息中。這裏有些事情必須完全錯誤。

這是我完全

<?php 

    header('Content-type: application/json');  // To ensure output json type. 
    class MyDB extends SQLite3 

    { 
     function __construct() 

     { 
     $this->open('database_sqlite3.db');  
     } 
    } 

    $db = new MyDB(); 

    if(!$db){  
     echo $db->lastErrorMsg();  
    } else {  
     echo "Opened database successfully\n";  
    } 

    $sql =<<<EOF 

     SELECT * from channels; 

EOF; 

    $ret = $db->query($sql); 

    $channelList = array(); 

    while($row = $ret->fetchArray(SQLITE3_ASSOC)){  
     $channelList[] = $row;  
    } 
    echo json_encode($channelList); 
    $db->close(); 
?> 

PHP,你可以看到我做編碼爲JSON。正如我所說,這在終端工作。 請記住,我不想在我的html中使用json,因此在異步請求完成之前生成的頁面還不是問題。

問題可能是我沒有在遠程服務器上執行此操作,而是在本地文件上執行此操作?據我所知,瀏覽器應該能夠處理這種情況。

+0

刪除'header('Content-type:application/json');'從你的php文件中再次檢查 – 2015-02-23 05:24:48

+0

結果仍然是一樣的 – 2015-02-23 05:26:02

+0

你確定你的php文件在可以運行php的服務器上嗎? – 2015-02-23 05:31:41

回答

1

我敢肯定,你的PHP沒有編譯的。這是因爲返回的結果實際上是你的php文件的body,表明沒有翻譯發生。

你可以檢查你的PHP實例通過創建具有代碼的文件運行:

<?php phpinfo() ?> 

和使用你的瀏覽器導航到該頁面,看看是否有任何輸出。你想檢查你的PHP/Apache安裝,直到輸出是正確的。至於爲什麼你的webtool工作,我不能幻想任何理由。它應該以同樣的方式失敗。

+0

嗯,我只是檢查終端'$ php channellookup.php'生成的字符串,它是有效的。我想我的網絡服務器不提供這個請求。據我所知,瀏覽器能夠處理xmlhttprequests,但當然不是PHP本身。我會檢查我的服務器配置。服務器與我正在開發的機器相同。 – 2015-02-23 05:42:01

+0

你錯誤地得出結論,只是因爲你在shell中有'$ php',意味着你的服務器綁定到了這個模塊,因此將解析它。當您執行'$ php channellookup.php'時,您正在解析代碼。因此它運行並返回您的數據。然而,當您從瀏覽器中的Web請求,它需要去一個服務器,如Apache,然後決定文件是否已請求(通常由文件擴展名,在這種情況下'*。* php')要求被解析,然後解析它。否則,你的瀏覽器請求永遠不能訪問shell'$ php'模塊。 – Calvintwr 2015-02-23 05:53:14

+0

另外,按照@Joerg所述進行更改。 – Calvintwr 2015-02-23 05:55:44

4

發送標題後,您將從數據庫回顯連接狀態。

刪除此行:

if(!$db){  
     echo $db->lastErrorMsg();  
    } else {  
     echo "Opened database successfully\n";  
    } 

並把標題中的JSON輸出上面:

header('Content-type: application/json'); 
echo json_encode($channelList); 
$db->close(); 
+0

你當然是對的。這段代碼是從教程中獲得的,並且在echo之後也有一個成功消息。我編輯過,但忘了編輯你提到的部分 – 2015-02-23 05:38:28