2012-01-19 14 views
0

を要求2のAjaxは、Webページの異なるビットを移入するためにデータを取得するために呼び出し、あなたが既に知っているだろうと、唯一の第二に発生します。私が作るしようとしている2アヤックス

だから私は、私はこれを行うだろうと考えた:

callAjax1('a'); callAjax2('b'); 

function callAjax1(data) { 
ajax(data); 
} 

function callAjax2(data) { 
ajax(data); 
} 

function ajax(data) { 
// calls XMLHttpRequestObject etc 
} 

アイデアは、その代わりに、AJAXを呼び出す()を2回、今、私は独立して実行しますアヤックスの二つの独立したインスタンスを持っていると思いました。

それは私が私が到着した知っているように)私はアヤックスの一番上(の警告に入れている場合にのみ機能します..しかし。

私は、アラートが最初のリクエストの時間を指定してから2番目のリクエストが呼び出される前に完了すると考えています。したがって、私はそれらを適切に別のインスタンスに分離することはできませんでした。それは不可能ですか?

私には何が欠けていますか?

すべてのベスト J

UPDATE: 私はこのことを考えている、私はチャンスを立てていますか?

tParams = new Array (2); // we intend to call ajax twice 
tParams[0] = new Array('ajaxGetDataController.php', 'PROJECT', 'id'); 
tParams[1] = new Array('ajaxGetFileController.php', 'FILE', 'projectId'); 

<select name='projectSelector' onchange=\"saveData(tParams, this.value);\">\n"; 

// gets called, twice 
function saveData(pParams, pData) // pParams are: PageToRun, Table, Field 
{ 
    if (XMLHttpRequestObject) 
    { 
     tPage = pParams[0][0]+'?table='+pParams[0][1]+'&pField='+pParams[0][2]+'&pData='+pData; 
     XMLHttpRequestObject.open('GET', tPage);\n 

     XMLHttpRequestObject.onreadystatechange = callAjax(pParams, pData); 

     XMLHttpRequestObject.send(null); 

    } 
} 

function callAjax(pParams, pData) 
{ 
if (XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200) 
    { 
     var tReceived = XMLHttpRequestObject.responseXML; 
     options = tReceived.getElementsByTagName('option'); // fields and their values stored in simplest XML as options 
     popForm(options, pParams[0][1]); // goes off to use the DOM to populate the onscreen form 
     pParams.shift(); // cuts off pParams[0] and moves all elements up one 
     if (pParams.length>0) 
     { 
      saveData(pParams, pData); 
     } 
    } 
} 

答えて

0

私はAJAX機能のための準備状態変数作成します。

function ajax(data) { 
readyState = false; 
// calls XMLHttpRequestObject etc 
} 

をした後、第2の呼び出しを実行する前に準備状態をチェック:

function callAjax2(data) { 
if(readyState == true) { 
ajax(data); 
readyState = true; 
} 
} 

をとすることを確認してくださいAJAX呼び出しの実行後にreadyStateをfalseに戻してください。これにより、最初のAJAX呼び出しが2番目の呼び出しが実行される前に実行を終了することが保証されます。

+0

ありがとう、私は今日それを見ます。一晩、私は呼び出しを再帰的に行うことができ、各呼び出しで、配列が空になるまで一番上の配列要素を削除する配列の配列を与えることができると考えました。あなたのものはより簡単に見えます:-) – JNAScarb

+0

準備が整っていなければ、2番目の呼び出しを実行しませんか?それは準備が整っているのを待っていません。それは? – JNAScarb

+0

私はこれにチャンスを与えますか? – JNAScarb

関連する問題