1

我有一个在 Chrome 和 Firefox 中工作的 JavaScript 客户端,但在 IE 中失败。查看 IE 调试器中的网络跟踪,它显示多个 AJAX 调用已中止。

我已经能够通过将超时设置为 0 来解决它。我想知道这是否是处理我的请求被中止的正确方法?基本上会出什么问题?

我最初的想法是我应该捕获并重新发送错误,如果多次重新提交没有导致完成请求,最后提醒用户。即使 setTimeout 是解决我当前问题的正确方法,我仍然想知道如何执行此操作。

此外,该应用程序将处理地址的 Excel 工作簿,调用 Web 服务向其中添加一些数据,然后允许用户下载增强的文件。

这是我到目前为止所拥有的,首先在 app.js

var requestWithFeedback = function (args) {
$(".loader").removeClass('hidden');

var oldConfig = args.config || function () { };
args.config = function (xhr) {
  xhr.setRequestHeader("Authorization", "Bearer " + localStorage.token);
  oldConfig(xhr);
  extract: extract;
};

var deferred = m.deferred();
setTimeout(function () { // <== This solved in IE, but is this the way to handle this?
m.request(args).then(deferred.resolve, function(err){
  if (err === "Invalid token!"){
    m.route('/');
  }
})}, 0);

$(".loader").addClass('hidden');
  return deferred.promise;
}

来自model.js

app.MarkedAddresses.ProcessAddressBatch = function () {
var requestData = {
    Addresses: app.MarkedAddresses.vm.addresses
}
return requestWithFeedback({
    method: "POST"
    , url: "API/server.ashx"
    , data: requestData
    , deserialize: function (value) { return value; }
})
.then(function (value) {
    var responseJSON = $.parseJSON(value);
    $.merge(app.MarkedAddresses.vm.results, responseJSON)

  app.MarkedAddresses.vm.currentRecord(app.MarkedAddresses.vm.results.length); 
  app.MarkedAddresses.vm.progress(Math.max(app.MarkedAddresses.vm.progress(), ~~(app.MarkedAddresses.vm.currentRecord() / app.MarkedAddresses.vm.totalRecords() * 100)));

    m.redraw(); //Force redraw for progress bar

    return value;
},
function (error) { console.log(error) }  // <== I thought error would show up here, but I never hit a breakpoint here.
);
}

添加了循环

function process_wb(wb) {
app.MarkedAddresses.vm.results.length = 0; 
$('.descending').removeClass("descending");
$('.ascending').removeClass("ascending");
app.MarkedAddresses.vm.progress(.1);
m.redraw();

var header = mapHeader(wb);

var addressJSON = to_json(wb, header);

app.MarkedAddresses.vm.totalRecords(addressJSON.length);

for (var i = 0; (i < addressJSON.length + 1) ; i += 1000) {
    app.MarkedAddresses.vm.addresses = addressJSON.slice(i, Math.min(((i) + 1000), addressJSON.length));
    app.MarkedAddresses.vm.response(new app.MarkedAddresses.vm.processAddressBatch());
}

}

为什么代码部分没有触发错误?似乎我应该在这里添加一个延迟部分,但我尝试过的任何事情都是语法错误。

4

0 回答 0