0

(对于刚开始阅读此内容的任何人,此问题已解决-见底部)

我试图了解对 ajax 的调用中发生了什么。此代码遍历“绑定器”列表并从服务器获取每个。(目前服务器上只有一个活页夹。)

发生的情况是:大约有 60 秒的延迟,我可以与网页交互,但没有显示活页夹。最后出现了一个活页夹,但它的图像缩略图丢失了,我无法与之交互。

从调用“log”到控制台的输出是:

活页夹:正确的 URL,我必须在这里审查

紧接着,

getAllBinders:完成项目

即使在最终显示活页夹之后,也不会打印任何其他内容。这告诉我“完成”、“失败”或“总是”的方法都没有被激活。我知道正在显示一个活页夹,所以代码一定没有崩溃。(正确的?)

下面是代码:

function getAllBinders() {
  
  var deferred = $.Deferred()

  _.each(binderPreviews, function(item, index) {

    console.log("Binder: "+ajaxPath+" "+item.url)

    $.ajax({
      xhrFields: {
        withCredentials: true
      },
      type: 'get',
      url: ajaxPath+item.url,
      dataType: 'json',
      contentType: "application/json",
      crossDomain: true
    })

    .done(function( data, message, jqxhr ) {

      console.log("getAllBinders Success!");

      // Store the binder record with an index
      $.extend(data, { order: index })

      // Replace null properties with empty strings
      _.each(data, function(value, prop, obj) {
        if( value == null ) obj[ prop ] = ''
      })

      App.Binder.createRecord( data ).save()

      // Check if it's the last call so we can resolve the activity
      if( index == binderPreviews.length - 1 ) {
        deferred.resolve()
        console.log( ConferenceApp.Binder.records() )
      }

      console.log("getAllBinders Index: "+index+", Total: "+binderPreviews.length);
    })

    .fail(function(xhr, status, msg) {
      console.log("getAllBinders Failure: "+status+", "+msg);
      console.log("getAllBinders Index: "+index+", Total: "+binderPreviews.length);
    })

    .always(function() {
      console.log("getAllBinders: ajax.always");
    });

    console.log("getAllBinders: Finished with item");

  })
}

作为一个实验,我在 ajax 调用中添加了一个不可能的超时(如下所示)。我的控制台的输出是:

活页夹:正确的 URL,我必须在这里审查

getAllBinders:完成项目

getAllBinders 失败:超时,超时

getAllBinders 索引:0,总计:1

getAllBinders:ajax.always

    $.ajax({
      xhrFields: {
        withCredentials: true
      },
      type: 'get',
      url: ajaxPath+item.url,
      dataType: 'json',
      contentType: "application/json",
      crossDomain: true,
      timeout: 1 //Test -- this should be impossible
    })

编辑:没关系,我发现了问题:/ App.Binder.createRecord 方法中有一个运行时错误,它一运行就崩溃了“完成”方法(但不是之前,这让我感到困惑)

4

0 回答 0