2012-05-06 67 views
2

我試圖使用jQuery和CakePHP的組合檢索一些數據。在CakePHP中使用AJAX檢索數據

我有一個feed()方法,從數據庫中發回數據JSON編碼。當我使用瀏覽器訪問URL時,該方法正常工作。

function feed($id = null) { 
    $this->layout = 'ajax'; 
    $data = array(
     'test' => true 
    ); 
    echo (json_encode($data)); 
} 

我也有一個方法,應該檢索數據,但由於某種原因,它不是。

var address = '/person_availabilities/feed/1'; 

// JavaScript Document 

$(document).ready(function() { 
    var events = doAJAXcall(address); 
    alert(events) 
} 


function doAJAXcall(url) { 
    $.ajax({ 
     type : 'POST', 
     url : url, 
     dataType : 'json', 
     data: { 
     }, 
     success : function(data){ 
      return data; 
     }, 
     error : function(XMLHttpRequest, textStatus, errorThrown) { 
      //$('#login_error').show(); 
     } 
    }); 
} 

我懷疑的URL可能是錯誤的,因爲Xdebug的不挑請求了。

有沒有人對我有任何建議?我一直在尋找四個多小時。

編輯:這是網頁本地主機地址/測試/ person_availabilities /飼料

+0

什麼網址,你在瀏覽器中,當你使用瀏覽器呢?瀏覽網址「http:// localhost/person_availabilities/feed/1」是否會返回任何內容? –

回答

1

有兩個問題,我看到你的AJAX請求。第一個需要理解AJAX請求本質上是異步的;因此,縮寫AJAX代表異步JavaScript和XML。異步組件是人們必須瞭解的關鍵。

您有一個函數可以向服務器發送AJAX請求,但在您的成功回調函數中,您正試圖返回一個值。你不能這樣做,因爲函數實際上在成功回調被觸發之前返回很久。

function doAJAXcall(url, callback) { 
    $.ajax({ 
     type : 'GET', 
     url : url, 
     success : function(data){ 
      // return data; // you cannot return data here 
      alert(data); // should print [ Object ] 
      try { 
       alert(JSON.stringify(data)); // should print JSON, assuming you're getting JSON 
      } catch(e) { 
       alert("Error trying to parse JSON. Is your server returning JSON? " + e.message); 
      } 
      if(callback) callback(data); // fire a callback function to process the data    
     }, 
     error : function(XMLHttpRequest, textStatus, errorThrown) { 
      //$('#login_error').show(); 
      alert("error :: " + textStatus + " : " + errorThrown); 
     } 
    }); 
} 

在上面的代碼中,我首先創建了一個警報,以便您可以查看是否引發任何錯誤。其次,我添加了一個回調函數,它會在調用成功後觸發,以便處理數據。

最後,您需要確保您使用的URL是正確的。您可以使用Chrome或Firebug調試器的NET選項卡來查看在AJAX請求觸發時是否將請求發送到服務器。查找500錯誤或404錯誤或告訴你請求不成功的東西。如果是這樣,請檢查URL以確保它與您在通過Web瀏覽器的地址欄發出GET請求時所使用的URL相同。

什麼是回調函數?

這是一個函數,您將其作爲參數傳遞給另一個函數。然後可以調用該函數並確保它是動態的,這意味着您可以通過簡單地傳遞不同的函數作爲回調來更改函數的行爲。

你的情況:

doAJAXcall(url, function() { alert("I am a callback"); }); 

會引起你的成功回調被解僱此警報,警報之後。 JavaScript中的函數被稱爲「第一類對象」,這意味着它們可以通過引用作爲參數傳遞給另一個函數!

有關回調函數的詳細信息,請參閱以下鏈接:

https://stackoverflow.com/a/3616266/552792

+0

第一個警報工作。 第二次警報也起作用。 (我不確定回撥是什麼,我正在研究它) –

+0

這是我需要做的。謝謝。 我不知道回調是什麼。此視頻幫助我瞭解了http://www.youtube.com/watch?v=VI9LI4DiJ8E –

3

如果你能使用您使用的是GET請求您的瀏覽器來查看它:

嘗試:

$.getJSON(url, function(data){ 
    alert(data); 
}); 

EDIT(附加信息):

不知道,如果你仍然有問題;但它聽起來像是你使用了錯誤的URL(缺少控制器部分)按你比如你的Ajax調用:

var address = '/person_availabilities/feed/1'; 

代替:

var address = '/Testing/person_availabilities/feed/1'; 
+0

不幸的是它不工作。 (使用我正在使用的網址更新帖子) –

+0

如果您只是簡單地在您已有的AJAX請求中更改POST以GET,它是否可以工作?如果你刪除'data:{}和'dataType:'json',怎麼辦?另外,爲什麼不嘗試取消註釋錯誤信息,以便看看是否有問題?另外,當您通過AJAX發出請求時,您的調試器或NET選項卡會說什麼? – jmort253

+0

我得到了一些使用這個網址 http:// localhost/Testing/person_availabilities/feed 感謝您的輸入。我只需要確保它現在按預期工作。 –