2012-01-22 71 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> 

即使data不是null頁面被跳轉到下一個頁面。 有人能幫我理解我在這裏做錯了什麼嗎?

謝謝。

回答

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

或更改代碼如下

<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()沒有返回值,不管你用get()得到什麼。在通過get()獲取AJAX數據之前結束checkDoubleSubmit()的執行,因爲它是異步調用。以這種方式處理它將不會取得成功。這樣做將返回始終爲假從checkDoubleSubmit(),然後在回調函數從get(),如果數據是OK,你要提交經過

的一種方式,由JavaScript再次提交表單,此時沒有任何檢查,以便它立即提交。