2012-01-14 20 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

相关问题