2015-09-28 13 views
1

這是一個noob問題。PHP腳本沒有從ajax函數調用

我的javascript函數(我已經定義了knockout.js模型的一部分):

self.loadData = function(){ 
     alert("loadData got called"); 
     $.ajax({ 
      url: 'database_connection.php', 
      dataType: 'json', 
      success: function(data){ //json string of records returned from server 
       alert('success from server call');    

      }, 
      error: function(){ 
       alert('error from server call');    
      } 

     }); 
    }; 

database_connection.php的內容:

<?php 
    echo "this is called"; 
    $db = new MySqli('localhost', 'username', 'password', 'database'); 
    $activities = $db->query("SELECT * FROM MainActivity"); 
    $activities_r = array(); 

    while($row = $activities->fetch_array()){ 
     $val = $row['mActivityID']; 
     $act = $row['Name']; 

     $activities_r[] = array('val'=>$val, 'act' => $act); 
     } 

     echo json_encode($activities_r); 

?> 

的PHP是正確的,怎麼,如果我直接訪問這個文件通過瀏覽器,它正確顯示數據庫表的結果。

然而,當通過loadData功能執行,我得到兩個警報: 1. "loadData is called" 2. "error from server call"

沒有被執行database_connection.php的第一行,因爲我不能看到的echo結果,所以這意味着腳本不會被調用。

我是否錯誤地使用了ajax函數?

+0

您使用ajax函數的方式看起來不錯。你確定'database_connection.php'可以像你調用loadData函數的地方那樣調用嗎? –

+0

http://stackoverflow.com/questions/4064444/returning-json-from-a-php-script –

+1

@DanBelden我不知道這將有助於OP回答他的問題。 –

回答

2

你的AJAX請求包含:

dataType: "json" 

這意味着,如果服務器200點OK的狀態返回無效JSON然後jQuery的觸發誤差函數

使用下面的代碼,以確保效應初探是JSON格式..(PHP vsersion)

header('Content-Type: application/json'); 

注意:空響應也被認爲無效JSON;您可以返回{}或null,驗證爲JSON

+0

試過這一點。我仍然在loadData函數中發生錯誤調用。然而,現在當我直接從瀏覽器打開php文件時,我得到這個錯誤:'警告:不能修改頭信息 - 已經由(在/path/to/file/database_connection.php:2開始的輸出)發送的頭''。 –

+0

刪除所有「回聲」或打印在您的PHP文件「標題」之前 –

+0

謝謝!現在工作。 :) –

1

您需要在php文件中添加標頭,因爲您的數據類型是json在ajax調用中。

header('Content-Type: application/json'); 
echo json_encode($activities_r); 
+0

試過了。我仍然在loadData函數中發生錯誤調用。但是,現在當我直接從瀏覽器打開php文件時,我得到這個錯誤:'警告:不能修改頭信息 - 頭已經發送(輸出開始在/path/to/file/database_connection.php:2)' –

0

您需要設置您的請求的type,並且可能會刪除dataType。在success回調中也是一個額外的支架。檢查它:

self.loadData = function(){ 
    alert("loadData got called"); 
    $.ajax({ 
     url: 'database_connection.php', 
     type : 'GET', 
     // dataType: 'json', 
     sucess: function(data){  //json string of records returned from server 
      alert('success from server call');    

     }, 
     error: function(){ 
      alert('error from server call');    
     } 

    }); 
}; 
+0

試過這個。好消息是我從服務器調用中獲得「成功」。不幸的是,我現在遇到兩個問題:1.這進入了無限循環。只要按'ok'按鈕查看'success'消息,就會再次彈出。必須強制退出瀏覽器才能結束這個無限循環。 2.這個頁面的數據是空的。 [我正在試圖訪問的表格中只有兩行。] –