为什么我的Jquery AJAX在成功后无法执行某些方法?

时间:2012-01-14 14:18:35

标签: jquery ajax forms

我创建了一个表单来向数据库插入新状态。我的场景使用jquery AJAX post方法来完成工作,因此页面不需要重新加载。然后在方法完成后,它将调用另外两个ajax方法来刷新我的应用程序时间轴(这两个方法执行PHP脚本,这是调用Twitter API然后刷新我的页面上的时间轴)。 update_status方法成功但无法执行另外两个方法。有什么建议吗?我非常感谢您的反馈。

这是我的代码:

$(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, '$1@<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;      
}

1 个答案:

答案 0 :(得分:0)

我想result[i]['user']update_timeline导致问题 - 可能是空值。你在使用javascript调试器吗?这应该显示结果对象的值是什么。

您还可以在ajax方法上定义错误回调,检查jqXhr(jquery http xml请求)对象的responseText - 它包含从服务器收到的响应。显然你期待一个json对象,但如果发生服务器错误,你可能会收到jquery不知道该怎么做的HTML。

$.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
                }