2012-01-22 13 views
1

私がjQuery.get()を送信している条件が真で、リンクが次のページにジャンプするかどうかをチェックしている場合、リンクを作成しようとしています。jQuery.get()でjavascriptが返されない

私はそれのために以下のコードを使用しています:

<script type="text/javascript"> 
    var jq = jQuery.noConflict(); 
    function checkDoubleSubmit() { 
     jq(function() { 
      jq.get("/checkDoubleSubmit", 
        function(data) { 
         if(data == null) { 
          return true; 
         } 
         else { 
          alert("double submit is not allowed"); 
          return false; 
         } 
        } 
      ); 
     }); 
    } 
</script> 


<a href="<c:url value="/submit" />" onclick="return checkDoubleSubmit();">check double submit</a> 

datanullない場合でも、ページが次のページにジャンプします。 誰かが私がここで間違っていることを理解するのを助けることができますか?

ありがとうございました。

答えて

0

私はこの次のコードを使用して作業しました:

<script type="text/javascript"> 
    var jq = jQuery.noConflict(); 
    function checkDoubleSubmit(obj) { 
     var checkDoubleSubmitResult; 
     jq.ajax({ 
      url:  "/checkDoubleSubmit", 
      success: function(data) { 
           if(data == null) { 
            checkDoubleSubmitResult = true; 
           } 
           else { 
            alert("double submit is not allowed"); 
            checkDoubleSubmitResult = false; 
           } 
          }, 
      async:  false, 
      dataType: "json" 
     }); 
     return checkDoubleSubmitResult; 
    } 
</script> 
<a href="<c:url value="/submit" />" onclick="return checkDoubleSubmit(this);">check double submit</a> 
1

実際にはcheckDoubleSubmit関数から真偽値を返すことはありません。 returnステートメントは、jq.getによって使用されている無名関数に戻るだけです。

あなたはこのような何かを行うことができます:

<script type="text/javascript"> 
    var jq = jQuery.noConflict(); 
    function checkDoubleSubmit() { 
     var doubleCheckResult; 
     jq(function() { 
      jq.get("/checkDoubleSubmit", 
        function(data) { 
         if(data == null) { 
          doubleCheckResult = true; 
         } 
         else { 
          alert("double submit is not allowed"); 
          doubleCheckResult = false; 
         } 
        } 
      ); 
     }); 
     return doubleCheckResult; 
    } 
</script> 

しかし、これはあなたが始められるでしょう。理由についてはdkuの回答を参照し、実装方法の詳細についてはHow can I get jQuery to perform a synchronous, rather than asynchronous, Ajax request?を参照してください。

+0

をこれが) 'checkDoubleSubmit(から何かを返すためのアプローチとなって'しかし、どのようにそれは動作しません来ているでしょうか?私は 'var doubleCheckResult'が' false'であると仮定しています。 – skip

3

これは、ajaxcallasynchronousであるためです。それはajaxの応答を待つことはありません。そのためには、ajax呼び出しでasync = fasleが含まれている必要があります。 preventDefaultを変更してください。

かにかかわらず、あなたがget()で何を得るのは、値を返さない

<a href="#" id="mylink" for="<c:url value="/submit" />" onclick="checkDoubleSubmit();">check double submit</a> 

<script type="text/javascript"> 
    var jq = jQuery.noConflict(); 
    function checkDoubleSubmit() { 
     jq(function() { 
      jq.get("/checkDoubleSubmit", 
        function(data) { 
         if(data == null) { 
          window.location = jq("a#mylink").attr("for"); 
         } 
         else { 
          alert("double submit is not allowed"); 
         } 
        } 
      ); 
     }); 
    } 
</script> 
+0

何らかの理由で、上記のコードでも機能しません。 'checkDoubleSubmit(obj)'がデータを取得する前であっても終了した場合、なぜ動作するのですか?私はここで何が欠けていますか?また、 'href'は' link'と同じ値を返しませんか?私は ''に関連付けられたリンク属性を見つけることさえできません。 – skip

+0

私はコードを更新して、今すぐ試してみてください。うまくいくことを願っています。 –

+0

それはまだ次のページに転送されています:(データの値が '[object XMLDocument]'になっていますが、サーバーから返送してきたものは 'Long' javaデータ型のjsonです。 'if(data == null)'が機能しない場合:(。 – skip

1

checkDoubleSubmit()以下のようにコードを変更します。 checkDoubleSubmit()の実行は、非同期呼び出しであるため、AJAXデータをget()まで取得する前に終了します。あなたはこのように扱うことで成功することはありません。

これを行うには、常にcheckDoubleSubmit()からfalseを返してから、get()のコールバック関数で、データがOKで、送信する必要がある場合はJavaScriptでフォームを再度送信しますそれはすぐに提出するようにチェックすることなく。

関連する問題