Javascript从外部JS文件调用同步函数

时间:2011-11-10 16:50:02

标签: javascript ajax xmlhttprequest

我在.js文件中有一个函数,它接收存储在localStorage中的信息,并使用同步ajax调用将它们同步回服务器。 (整合顺序至关重要,因此需要同步)

function syncUp() {
    var xml = new XMLHttpRequest();
    xml.open("GET", "Default.aspx", true);  Also tried setting this to false
    xml.onreadystatechange = function() {
       if (xml.readyState == 4) {
         if (xml.status == 200) {
             var items = localStorage.getItem("SyncOrder");
             var sync = items.split(",");

             for (var i = 0; i < sync.length -1; i++) {
                 Perform repeated synchronous calls to webservice via AJAX to integrate each item to the server
              }
           }
        }
     }
  xml.send(null);
  }

从多个地方调用syncUp()。当直接从按钮的onclick事件调用时,syncUp()是唯一被调用的函数并且唯一的代码正在运行,它可以很好地工作。但是,如果从我首先将项添加到localStorage对象然后调用syncUp()的页面,如下所示

function saveEdit(item) {
      var currData = localStorage.getItem("SyncOrder");
      localStorage["SyncOrder"] = currData + "," + item;
      syncUp();
}

,xmlHTTPRequest状态返回0并且同步不执行。什么可能阻止xmlHTTPRequest获得200的响应,因为在syncUp()之前运行的唯一代码是几行javascript,应该在站点进入syncUp()之前执行?

1 个答案:

答案 0 :(得分:1)

状态代码为零的原因有两个。

  1. 从文件协议拨打电话。
  2. 正在进行请求时页面正在刷新/导航。
  3. 在你的情况下,我认为它是#2。如果您使用按钮或链接进行Ajax调用,请务必使用preventDefaultreturn false取消点击操作。