2011-10-19 15 views
0

JSONPを使用してログインフォームの値を取得してから、自己提出フォームを取得しています。ただし、フィールドが入力される前にフォームが送信されているため、検証フラグが生成されます。json値で入力されたフィールドの前に送信されるフォーム

関数は正しい値を返しますが、グローバルスコープの変数unscrambleTextはundefinedを返します。私はasync:同期calssを返すにはfalseが必要だが、この場合は無視されるようだ。私はこれを別のページの基本的なAJAX呼び出しで動作させることにしました。私はこの具体例で何が欠けていますか?

$(document).ready(function() { 
      if ((getQueryVariable("a") != 0) && (getQueryVariable("b") != 0)) { 
       $("#UsernameTextBox").val(decryptEm(getQueryVariable("a"))); 
       $("#PasswordTextBox").val(decryptEm(getQueryVariable("b")); 
       //This action is being triggered before the above two fields are populated 
       $("#ctl00_ContentPlaceHolder1_SubmitButton").trigger("click"); 
      } 

      function getQueryVariable(variable) { 
       var query = window.location.search.substring(1); 
       var vars = query.split("&"); 
       for (var i = 0; i < vars.length; i++) { 
        var pair = vars[i].split("="); 
        if (pair[0] == variable) { 
         return unescape(pair[1]); 
        } 
       } 
       return 0; 
      } 

      function decryptEm(thevar) { 
       var unscrambleText; 

       $.ajax({ 
        url: 'http://foo.bar/decrypt.php', 
        async: false, 
        dataType: 'jsonp', 
        data: 'text=' + thevar, 
        success: function (data) { 
         unscrambleText = data["theval"].replace(/^\s+|\s+$/g, ""); 
        } 
       }); 
       return unscrambleText; 
      } 

     }); 

答えて

0

クリックをトリガーする前にsetIntervalを試してみてください。おそらく2秒の遅延で十分でしょう。

が交互に、それは関数が返す値がないため、すべてのフィールドを行うと、両方を返す、とだけにしてあなたあなたのトリガーフォームがundefinedを返す

+0

decryptEm()は両方の値を同時に解析することを意味しますか? decryptEm()内の** $(blah).trigger( 'click')**をこの問題を解決するでしょうか? –

+0

はい、同時に、両方ともクリックします。現在の関数の中にクリックを置くことは、最初に起動するようには機能しませんが、これは望ましくありません。 –

0

その書を提出するだろうこれ、decryptEmsを行うには、あなたのコードを変更します。 decryptEmとサーバーがあなたの要求に応答するまでの間に遅延があります。この遅延は、サーバーの応答時間に依存するため、何でもかまいません。このような機能でこれを入れて

0

、:

function loadValues(){ 
    $("#UsernameTextBox").val(decryptEm(getQueryVariable("a"))); 
    $("#PasswordTextBox").val(decryptEm(getQueryVariable("b")); 
    return true; 
} 
if(loadValues==true){ 
    $("#ctl00_ContentPlaceHolder1_SubmitButton").trigger("click"); 
} 

あなたが発射される提出する前に、他のものが終了したことを確認することができますこの方法です。

+0

何も起こりません。 decryptEmは呼び出されません。私はあなたのコードをコードブロックの先頭に微調整していました。それは重要ですか? –

関連する問題