1

dialogjQueryボックス機能を使用しようとしていbeforeCloseます。ユーザー フォーム データが適切にフォーマットされているかどうかを確認しています。そうでない場合は、に戻りfalsebeforeCloseユーザーが情報を再入力できるようにします。

ダイアログ ボックスのコードは、次の関数submituserupdateformを呼び出しbeforeCloseます。

.dialog({beforeClose: function () {
  formresult=submituserupdateform($('#myaccountdialog').find('form'));
  if (formresult !="okay"){
    return false;
 }
}})

このsubmituserupdateform関数は、コードにエラーがあったかどうかを確認します。

function submituserupdateform($tgt){
  var url='./includes/admin/user/myaccount.php';
  $.ajax({
      type: "POST",
      url: url,
      data: $tgt.serialize(),
      success: function(data){
        $("#myaccountdialog").html(data);
        if ($('.error').length){
          var myresult= "notokay";
        } else {
          var myresult ="okay";
        }
      },
      dataType: "html"
    });
   return myresult;
}

検索してhttps://stackoverflow.com/questions/1632039/return-value-from-ajax-callを見つけましたが、既にmyresult成功コールバック内に設定しています。私も試しましajaxCompleteajaxSuccess、、.done。コンソールによると、私が試したものは何もありませんmyresult。私はいつも次のようになります:

Uncaught ReferenceError: myresult is not defined

これは単純なエラーに違いありません。私の間違いを見つけたら、助けてください!

4

4 に答える 4

1

ajax の非同期動作により、ajax 成功コールバックの前に関数が返されます (これは望ましくありません) 。

追加できasyncます:false

 var myresult ="":
 $.ajax({
      type: "POST",
      url: url,
      data: $tgt.serialize(),
      async:false,
      success: function(data){
于 2013-04-22T17:43:06.277 に答える
1

これmyresultは、成功ブロックのみにスコープが設定されているためです。外に宣言する

function submituserupdateform($tgt){
  var url='./includes/admin/user/myaccount.php';
  var myresult;
  $.ajax({
      type: "POST",
      url: url,
      data: $tgt.serialize(),
      success: function(data){
        $("#myaccountdialog").html(data);
        if ($('.error').length){
          myresult= "notokay";
        } else {
          myresult ="okay";
        }
        return myresult;

      },
      dataType: "html"
    });

}

また、@Mohammad Adil が指摘したように、前に実行する以下のコードにformResultAJAX からの値が割り当てられる可能性があります。

if (formresult !="okay"){
    return false;
 }

async = falseこの場合、彼の提案どおりに行くことができます。コードは常に機能するため、これも追加する必要があります

于 2013-04-22T17:42:13.817 に答える
0

$.ajax は非同期です。つまり、リクエストを送信してすぐに戻ります。ajax リクエストがバックグラウンドで実行されている間、通常のスクリプトの実行は続行されます。

あなたがすべきことは、ダイアログを開いたままバックグラウンドでajaxリクエストが実行されている間に、待機中のアイコンを表示することです。ajax リクエストが返されたら、ajax イベント ハンドラーを使用して結果を処理し、結果に応じてダイアログを閉じるか、エラー メッセージを表示して開いたままにします。

于 2013-04-22T17:47:08.073 に答える
0

君の

var myresult

このように宣言する関数ではグローバルに使用できません

function submituserupdateform($tgt){

    var myresult;
于 2013-04-22T17:41:30.390 に答える