2011-11-10 50 views
1

私はlocalStorageに格納された情報を取得し、同期ajax呼び出しを使用してそれらをサーバーに同期させる.jsファイル内の関数を持っています。Javascript外部JSファイルから同期関数を呼び出す

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()が呼び出されています(統合の順序が重要です。同期が必要です)。 syncUp()が呼び出された唯一の関数で、実行中のコードが1つだけであるボタンのonclickイベントから直接呼び出されたとき、それはうまく動作します。しかし、

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

を次のように私が最初)のlocalStorageオブジェクトに項目を追加し、syncUp(呼び出していますページからの場合は、XMLHttpRequestのステータスは0を返し、同期は実行されません。 xmlHTTPRequestがsyncUp()の前に実行されている唯一のコードとして200の応答を得ることを妨げる可能性があるのは、サイトがsyncUp()に入る前に実行されるべきjavascriptの2行ですか?

+0

saveEditはどのように呼び出されますか? – epascarello

+0

ボタンonclickイベント。特定のページに加えられた編集内容をlocalStorageに保存し、それを同期しようとします。 – jmease

答えて

1

ステータスコードが0の原因は2つあります。

  1. ファイルプロトコルからの呼び出し。
  2. リクエストが行われているため、ページがリフレッシュ/ナビゲートされています。

私は#2と思われます。ボタンまたはリンクを使用してAjaxコールを発信する場合は、preventDefaultまたはreturn falseのクリックアクションをキャンセルしてください。

+0

さて、私はちょうど愚かな気分になります。場所を削除するのを忘れてしまった=私がそこにあった場所の行は、ページを更新するために、私はこれをすべて異なった構造にしていた。それを取り除いて、今はすべて大丈夫です。本当にありがとう! – jmease

関連する問題