[英]javascript return with jQuery.get() not working
如果條件為真,我正在嘗試使鏈接正常工作,為此我正在發送jQuery.get()
並檢查鏈接是否應跳至下一頁。
我正在使用以下代碼:
<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
,頁面也會跳至下一頁。 有人可以幫助我了解我在做什么錯嗎?
謝謝。
那是因為ajax
call
是asynchronous
。 它不會等待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>
您實際上從未從checkDoubleSubmit
函數返回任何true / false值。 您的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的答案以了解其原因,然后查看如何使jQuery執行同步而不是異步的Ajax請求? 有關如何實施的詳細信息。
無論使用get()
什么, checkDoubleSubmit()
都不返回值。 在通過get()
獲取AJAX數據之前, checkDoubleSubmit()
的執行結束,因為它是異步調用。 這樣處理將不會成功。
一種方法是從checkDoubleSubmit()
返回錯誤的ALWAYS,然后在get()
的回調函數中,如果數據正常並且您希望提交通過,則這次通過JavaScript再次提交表單沒有任何檢查,以便立即提交。
我使用以下代碼進行工作:
<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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.