你能在jquery中的另一个AJAX调用中进行AJAX调用吗?

时间:2009-08-12 06:38:48

标签: jquery ajax

下面是我正在处理的jquery脚本,我已经删除了它的所有不相关部分。

你可以看到有一个ajax调用,结果有一个if语句,其他项目我们被剥离但是无论如何,验证码是从第一个ajax调用的结果中挑选出来的。

然后我需要进行第二次ajax调用,这是我的麻烦所在,我没有错误,但它似乎没有在第二次返回响应,我错过了什么?

<script type="text/javascript">
    $(document).ready(function() {
        // make ajax call
        var dataString = 'comment=' + comment;
        $.ajax({
            type: "POST",
            url: "process.php",
            data: dataString,
            dataType: "json",
            success: function(data) {
                //result from 1st ajax call returns "captcha"
                if (data.response === 'captcha') {
                    //a bunch of code is ran
                    ////////////////////////
                    //then...
                    $().bind('cbox_closed', function() {
                        var dataString2 = 'comment=' + comment + '&run=captchagood';

                        // our nested ajax call
                        // this is the part that is having trouble =(
                        $.ajax({
                            type: "POST",
                            url: "process.php",
                            data2: dataString2,
                            dataType: "json",
                            success: function(data2) {
                                if (data2.response === 'captchagood') {
                                    alert('test');
                                    $('div#loader').find('img.load-gif').remove();
                                    $('div#loader').append('<span class="success">Thanks for your comment!</span>');
                                    $('div#loader').hide().fadeIn('slow');
                                    $('span.limit').remove();
                                    $('div#comments').append(data);
                                    $('div#comments div.comment-unapproved:nth-child(1)').hide().slideDown('slow');
                                    $('input#submit-comment').unbind('click').click(function() {
                                        return false;
                                    });
                                    // success append the sanitized-comment to the page
                                    $('#comments').prepend(data.comment);
                                };
                                // end captcha status returned
                            }
                        });
                    });
                };
                return false;
            });
        });
    });
</script>

2 个答案:

答案 0 :(得分:12)

在ajax回调中进行ajax调用没有错。事实上,你甚至没有这样做,你在这里做的是:

  1. Ajax call
  2. 如果调用成功并返回'captcha',则将函数绑定到cbox_closed事件
  3. 当触发cbox_closed事件时,请调用包含另一个ajax调用的绑定函数
  4. 要检查的一些事项:
    服务器是否成功返回? (没有404,500错误等)
    你期待一个json的回应。它是否包含您要检查的{response:'captcha}等数据? 什么时候触发了cbox_closed事件?你确定它正在发生吗?

答案 1 :(得分:3)

你已经将'success'回调传递给jQuery,但没有'错误'回调。这样你就忽略了这个错误。以下是捕获错误的示例,并可选择将其显示在Firebug控制台中。

var lastRequest = jQuery.ajax( { type:     "POST"
                               , url:      this._ajaxUrl
                               , data:     postdata
                               , dataType: "json"
                               , success:  _gotAjaxResponse
                               , error:    _gotAjaxError
                               } );

function _gotAjaxResponse( data )
{
  window.console && console.log( data );
}

function _gotAjaxError(xhr, status, error)
{
  // Show server script errors in the console.
  if( xhr.status == 500 )
  {
    var response = xhr.responseText;
    response = response.replace( /\r?\n/g, "" )
                       .replace( /(<\/)/g, "\n$1" )
                       .replace( /<[^>]+>/g, "" )
                       .replace( /^\s+/, "" )
                       .replace( /\s+$/, "" );
    window.console && console.error(response);
  }

  alert("I'm sorry...\n\n"
      + "Unfortunately an error occured while communicating with the server.\n"
      + "Please try again later.");
}