2011-12-16 19 views
0

フォームsubmit()からデータを取得する必要がある状況があります。私はアクションのURLと入力要素として送信される値を与えました。送信はREST Webサービスに送信されます。ajaxForm非同期呼び出し

通常のform.submit()では実行できない値を取得したいので、ajaxForm()呼び出しを使用しなければなりませんでした。私は、成功オプションについて言及したハンドラは、RESTメソッドが正常に終了した後に呼び出されると考えます。私はまた、呼び出しを完了し、次に進むだけで、async:falseオプションを与えました。

私の問題は、ハンドラが他のコードの後に​​実行されるということです。つまり、ajax呼び出しが実行された後にコードがコールされた後、ハンドラが実行された後です。私は非同期を与える場合、これは正しくありません:false right ??

これはあなたの参照のための私のコードです:サーバコンソールに

<form id="form4" action="http://comp1:8080/RestWSGS/jersey/ExcelHtmlTablePlain" style="display:none" 
     enctype="multipart/form-data" method="post"> 
     <input id ="username" name="username" type="hidden" /> 
     <input id ="wbk" name="wbk" type="hidden" value="new" /> 
     <input type="submit" style="display:none" /> 
</form> 

$(function() { 
    $('#form4').submit(); 
    alert(tbLHSString); 
} 

function showResponse(responseText, statusText, xhr, $form) { 

    if (xhr.readyState == 4) { 
     tbLHSString = responseText; 
    } 
    alert('status: ' + statusText + '\n\nresponseText: \n' + responseText + '\n\nThe output div should have already been updated with the responseText.'); 
    executed == true; 
} 

私はRESTが完全に実行されることがわかります。しかし、私は変数を定義されていないものとして取得し、その後、showResponseからの警告が発生します。

この呼び出しを同期させるのを手伝ってください!!! Kavita

答えて

0

あなたのAJAXコールが同期しているということは、他のAJAXコールが完了するのを待たなければならないことを意味します。 JavaScriptエンジンがそれ以上実行されるのを妨げるものではありません。私はここで同期呼び出しに対してアドバイスをしますが、それはあなたが何をしているかのようではありません。

コールバックによって、AJAXコールの後まで待たなければならないものがあり、送信自体の直後ではないことを確認する必要があります。

ajaxFormを実際に初期化するコードは含まれていませんが、AJAXリクエストが成功した後にshowResponseが呼び出されていると仮定し、その後にalert(tbLHSString);を呼び出すようにします。その場合は、アラートをshowResponseに移動する必要があります。

コードが多すぎる場合や、コールバック自体に入れるのに不都合がある場合は、コールバックによって呼び出される関数に委任してください。

$(function() { 
    $('#form4').submit(); 
} 

function onFormSubmitted() { 
    alert(tbLHSString); 
} 

function showResponse(...) { 

    ... 

    onFormSubmitted(); 

} 
+0

私はそれを実行しましたが、async:falseを指定してajaxFormへの同期呼び出しが非同期的に動作しないことを意味します。私はshowresponseで変数を初期化して試してみましたが、値が設定されていれば進めます。しかし、それはループに入れて...とにかく感謝!!幸いなことに、コードはそれほど多くありませんでした! – kavita

+0

@kavita: 'async:false'プロパティは他の発信HTTPリクエストにのみ影響し、JavaScript自体の継続的な実行には関係しません。したがって、 'async:false'を使用した場合、' submit'の直後に 'alert'を呼び出すことになりますが、2つのサブミットがある場合(say)、' showResponse'の最初の呼び出し常に 'submit'への最初の呼び出しに対する応答でした。 –

+0

ok greatは何か新しいことを学んだ!ありがとう – kavita

関連する問題