簡體   English   中英

Javascript AJAX 請求問題

[英]Javascript AJAX request problems

我在執行 AJAX 的某個位時遇到問題。 這是我想要發生的方式:

我有一個表單,在按下按鈕時,我想執行一小部分 Javascript(確認操作的執行),發送 AJAX 請求,然后提交表單。 我不關心 AJAX 請求的 output ,但它需要在提交表單之前運行。

按鈕定義為:

<input title="Delete" onclick="return check_delete('id');" 
type="submit" name="Delete" value="Delete">

function check_delete 是:

var sure = confirm('Are you sure you want to delete this?');
if (!sure) return false;

var del = confirm('Would you like to delete related content?');
if (window.XMLHttpRequest) {
    xmlhttp=new XMLHttpRequest();
} else {
    xmlhttp=new ActiveXObject('Microsoft.XMLHTTP');
}
var url = '/del_check.php&id='+id+'&del='+del;

xmlhttp.open('GET',url,true);
xmlhttp.send();
return true;

function 運行良好,除了xmlhttp.send()部分 - 請求不會顯示在 Web 服務器的日志中,也不會被執行。 玩了一下之后,我發現如果我將 function 中的最后一行更改為返回false而不是true ,我的 AJAX 開始工作,但是,由於返回值為false ,表單沒有被提交。

我錯過了什么?

這一行:

xmlhttp.open('GET',url,true);

表示您正在發出異步請求( MSDNW3C )。 該請求由您的代碼發起,但您的代碼不會阻止等待它完成(這通常是一件好事tm )。

但是,當您提交表單時,該頁面將被拆除並替換為表單提交的結果。 任何未完成或排隊的 ajax 請求都將被中止,甚至永遠不會啟動。

可以通過將true更改為false來使請求同步(阻塞),但隨后您將鎖定頁面(最好的情況)或瀏覽器(最壞的情況),直到該請求完成,這並不理想。

替代方法是避免完全執行 ajax 請求,或者取消表單提交,等待 ajax 響應(即使您不關心它),然后以編程方式提交表單(通過HTMLFormElement#submit — 例如,調用submitform的 DOM 元素上)。 如果您執行第二個,請注意您單擊的按鈕不會包含在表單數據中,除非您手動插入它,因為該按鈕不再提交表單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM