2012-01-14 19 views
0

我做了一個表格來向數據庫插入新的狀態。我的場景使用jQuery AJAX post方法來完成這項工作,所以頁面不需要重新加載。然後在完成該方法後,它將調用另外兩個ajax方法來刷新我的應用程序時間表(這兩個方法執行PHP腳本,這是調用Twitter API,然後刷新頁面上的時間線)。 update_status方法成功,但無法執行另外兩種方法。任何建議傢伙?我非常感謝你的反饋。爲什麼我的JQuery AJAX無法成功執行某些方法?

這是我的代碼:

$(document).ready(function(){ 

    $(function() { 
     $("#update_status_btn").click(function() { 
      var user_id = $("#update_status #user_id").val(); 
      var status = $("#update_status #status").val(); 
      var dataString = 'user_id='+ user_id + '&status=' + status; 

       update_status('profile/update_status', dataString); 
      return false; 
       }); 
    }); 




}); 

function update_status(method_url, dataString) 
{ 
     $.ajax({ 
      type: 'POST', 
      url: method_url, 
      data: dataString, 
      cache: false, 
      success: function() { 
       //the following methods won't executed :-(
       update_timeline('profile/get_user_timeline', '#user_timeline ul'); 
       update_timeline('profile/get_home_timeline', '#home_timeline ul'); 
      } 
     }); 
} 

function update_timeline(method_url, target) 
{ 
     //get home timeline 
     $.ajax({ 
      type: 'GET', 
      url: method_url, 
      dataType: 'json', 
      cache: false, 
      success: function(result) { 
      $(target).empty(); 
      for(i=0;i<result.length;i++){ 
       $(target).append('<li><article><img src="'+ result[i]['user']['profile_image_url'] +'"><a href="">'+ result[i]['user']['screen_name'] + '</a>'+ linkify(result[i]['text']) +'</li></article>'); 
      } 
      } 
     }); 
} 


function linkify(data) 
{ 
    var param = data.replace(/(^|\s)@(\w+)/g, '[email protected]<a href="http://www.twitter.com/$2" target="_blank">$2</a>'); 
    var param2 = param.replace(/(^|\s)#(\w+)/g, '$1#<a href="http://search.twitter.com/search?q=%23$2" target="_blank">$2</a>'); 
    return param2;  
} 
+0

'#status'的內容是什麼?你不是'URIEncode',如果某些字符存在,這可能是一個問題。 – lonesomeday 2012-01-14 14:28:14

+0

你確定這個網址的狀態是200嗎?如果ajax調用不認爲調用成功,則不調用成功選項中定義的函數。 – 2012-01-14 15:24:36

+0

@ scott.korin嗯..我對這個AJAX的東西很新,我沒有檢查它。但我通過查看我的數據庫手動檢查,併成功插入新行。它也成功更新我的twitter狀態。我和其他兩種方法一起提供了成功回調函數的警報。警報顯示出來。這意味着該方法是成功的嗎?但其他方法似乎沒有執行,因爲我的時間表不會立即刷新。一件事,'update_timeline'沒什麼錯,因爲到目前爲止它工作(我把我的腳本中每60秒調用一行代碼,它的工作原理:-) – under5hell 2012-01-15 05:22:21

回答

0

我想象result[i]['user']update_timeline導致問題 - 可能是一個空值。你使用的是JavaScript調試器嗎?它應該告訴你結果對象的值是什麼。

您還可以在您的ajax方法上定義錯誤回調,檢查jqXhr(jquery http xml請求)對象的responseText - 它包含從服務器接收到的響應。顯然,你期待的是一個json對象,但是如果發生服務器錯誤,你可能會收到HTML,jQuery不知道該怎麼做。

$.ajax({ 
type: 'Post' 
url: method_url, 
    data: dataString, 
cache: false, 
success: function() {}, 
error: function (jqHxr, statusText) { 
    //jqXhr.responseText holds the response sent from the server 
       } 
+0

是的,我正在使用內置javascript調試器的鉻。實際上,'update_timeline'函數沒什麼問題,我試着直接在'$(document).ready'函數後面調用它。即使它可以完美地更新我的時間表。我認爲'update_status'函數有問題。坦率地說,我是這個AJAX新手,我已經閱讀了JQuery AJAX文檔。它說'成功:'回調方法可以檢索某個函數的數組,但我不知道該怎麼做。該文檔不包含有關此問題的任何示例。你有另外一個建議嗎? – under5hell 2012-01-14 14:39:14

+0

我用一些代碼更新了我的答案,希望它能幫助 – Jason 2012-01-14 14:45:37

相關問題