2016-08-22 1 views
-1

私はユーザー入力データを持っていますが、それを投稿するためにajaxを使用し、その情報を使ってオブジェクトを動的に作成しますが、if文は機能しません。私はコードの中に多くの$(this)をターゲットにしているため、クリック機能の下にコードが必要です。これは、Ajax投稿の後に発射しようとしているコード内です。jqueryアクションの作成方法は、他の関数が完了するまで待ってください。

$(document).on('click' , ".addition" , function(event) { 

    $(".submitfolder").click(function() { 
    var data3 = $("#form2 :input").serialize(); 
    var data4 = $("#form2 :input").val(); 
    nameforfolder = data4; 

     $.ajax({ 
     url: "userfolders.php", 
     type: "POST", 
     data: data3, 
     success: function() { 
     var asd = 1; 
     } 
     }); 

    if (asd > 0) { 
     //do stuff that needs data4. 

    } else {   
     //something 

    } 
}); 
+0

部分デュープます。http:

そして、あなたが$(this)心配している場合は、終了間際には、よく知られている一般的なハック

var _this = this; 

を使用し、あなたはこのようなもので終わる必要があります://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call/14220323#14220323 –

答えて

-1

問題は、成功の関数では、その関数でのみ表示される新しい変数asdを宣言することです。したがって、最初の関数でasdを宣言し、次に2番目の関数でasdを変更する必要があります。

var asd = 0; 
    $(".submitfolder").click(function() { 
     var data3 = $("#form2 :input").serialize(); 
     var data4 = $("#form2 :input").val(); 
     nameforfolder = data4; 

      $.ajax({ 
      url: "userfolders.php", 
      type: "POST", 
      data: data3, 
      success: function() { 
      asd = 1; 
      } 

      }); 
-1

あなたはjavascriptが前の行がまだ行われていない場合でも、コードの次の行を実行し続けつまり、JavascriptとAJAXは非同期に動作することを理解する必要があります!したがって、あなたのif (asd > 0)ステートメントは、実行時に定義されていない変数で動作しています。だからsuccessコールの$.ajaxコールのロジックにそのロジックを配置する必要があります。

$(".submitfolder").click(function() { 
    ... 
    var _this = this; 

    $.ajax({ 
    url: "userfolders.php", 
    type: "POST", 
    data: data3, 
    success: function() { 
     var asd = 1; 
     if (asd > 0) { 
     // instead of $(this).hide() 
     $(_this).hide(); 
     } else { 
     // something 
     } 
    } 
    }); 
}); 
+1

ありがとうございました、この回答はうまくいきました。 var _this = thisを認識していなかった。ハック、非常に便利! –