2012-01-22 43 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再次提交表单,此时没有任何检查,以便它立即提交。