2012-08-03 41 views
0

功能後沒有返回相應的值那麼我得到在這裏是非常簡單的:jQuery的.submit Ajax請求

$("form").submit(function() { 
    var loc = $("input#location").val(); 
    var response = $.ajax({ 
     url: "checklocation.php", 
     data: {loc: loc}, 
     async: false, 
     type: "POST", 
     success: function(msg) { 
      if (msg['status'] == "OK") { 
       return true; 
      } else { 
       return false; 
      } 
     } 
    }); 
    return !(response['responseText'].indexOf("ZERO_RESULTS") != -1); 
}); 

checklocation.php返回一個JSON字符串。這兩個回報都沒有被擊中,但是如果我在兩者中都有一個alert(),條件確實有效。但是,如果我在Firebug中逐步完成這項工作,就好像成功函數中的東西永遠不會被執行一樣。

這只是每次都返回true,無論是什麼(表單被提交)。

編輯:

$("form").submit(function() { 
    var loc = $("input#location").val(); 
    var response = $.ajax({ 
     url: "checklocation.php", 
     data: {loc: loc}, 
     type: "POST", 
     success: function(msg) { 
      if (msg == '1') { 
       return false; 
      } else { 
       return true; 
      } 
     } 
    }); 
}); 

它仍然會跳過成功的功能,儘管響應是的狀態文本:
即使簡化後的成功。「

+0

您是否嘗試過使用完整和錯誤回調?因爲只有響應來自200或2xx系列狀態碼,纔會執行「成功」。使用'done,fail,always'會比JQuery 1.8棄用更好。 – 2012-08-03 03:33:38

+0

我試過了,它不會到達那裏。我可以在Firebug中清楚地看到響應有一個200狀態代碼和一個「成功」狀態文本。 – 2012-08-03 03:36:17

+0

爲什麼你使用'async:false'?是否有意義?在JQuery 1.8中也不推薦使用 – 2012-08-03 04:59:50

回答

1

我不知道爲什麼你正在使用async:false,正如我猜測的可能的修復將是,

$("form").submit(function() { 
    var loc = $("input#location").val(); 
    var response = $.ajax({ 
     url: "checklocation.php", 
     data: {loc: loc}, 
     type: "POST", 
     success: function(msg) { 
      if (msg['status'] == "OK") { 
       return true; 
      } else { 
       return false; 
      } 
     }, 
     complete: function(){ 
      return !(response['responseText'].indexOf("ZERO_RESULTS") != -1); 
     }, 
    });   
}); 

可能發生的問題,因爲

return !(response['responseText'].indexOf("ZERO_RESULTS") != -1);

可能有在執行成功回調之前執行,實際上此時response['responseText']未定義。但是你會得到迴應,因爲ajax請求已經發送。

0

就像thujeevan指出的那樣,最後一行是在ajax有時間完成之前執行的,因此響應變量正在被函數檢查並返回時正在執行的過程中執行。

這個工作的最好方法是用一個普通的按鈕替換提交按鈕,當點擊該按鈕時該檢查就會運行。然後,您將另一個代碼添加到表單的提交操作中,只有在支票已完成並且沒有問題的情況下才會提交。

財產以後這樣的:

<form method="post" id="theform"> 
<input type="text" id="location" /> 
<input type="button" id="button_submit" value="Submit" /> 
</form> 

<script> 
var ok = false; 

$('#button_submit').click(function() { 
    var loc = $('input#location').val(); 
    $.ajax({ 
    url: 'checklocation.php', 
    data: {loc: loc}, 
    type: 'POST', 
    success: function(msg) { 
    ok = (msg['status'] == "OK"); 
    }, 
    error: function() { 
    ok = false; 
    } 
    }); 
    $('#theform').submit(); 
}); 

$('#theform').submit(function() { 
    return ok; 
}); 
</script> 

希望這有助於! ;)