[英]jQuery .post params not sending
我遇到了一個問題,我已經嘗試研究和修復了幾個小時,而我不知所措,無法理解為什么它無法正常工作。
當有人要刪除項目時(通過單擊刪除圖標圖像並使用提供的“ id”整數調用JS函數),我會彈出一個jQuery對話框(通過jQuery UI)。 彈出對話框正常工作,並提供所有可用信息和按鈕選項。 這是該代碼:
function removeItem(id) {
var rid = id;
$("#dialog").dialog({
title: "Removal Confirmation",
resizable: false,
height: 200,
modal: true,
show: {
effect: "blind",
duration: 800
},
buttons: {
"Confirm": function() {
$.post("includes/inc_details.php", {
"type":"remove",
"id":rid
});
window.location.reload();
$(this).dialog("close");
},
Cancel: function() {
$(this).dialog("close");
}
}
});
}
單擊對話框中的“確認”按鈕時,假定將.post到php文件中以進行進一步處理(該部分的代碼在下面),完成后將重新加載瀏覽器窗口,然后關閉對話框。
但是,通常發生的情況是頁面看上去就像它正在重新加載,然后對話框關閉,但該項目不會被刪除。 我看過通過chromeDev工具進行的處理,看來當.post php文件被調用時,兩個參數並未隨其一起發送。 (我在其他地方使用過類似的.posts-盡管沒有jQuery UI對話框-沒有問題)。
救命!
通過.post方法調用的PHP代碼:
$sql = "select * from shopping_cart WHERE id=$_POST[id] LIMIT 1";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
if ($row["Type"] == "CouponUsed") {
$sql_delete_free_item = "delete from shopping_cart where ProductID=".$_SESSION["freeProductId"]." and SessionID='".session_id()."'";
$query = mysql_query($sql_delete_free_item);
unset($_SESSION["freeProductId"]);
}
$sql_id = "SELECT ProductID FROM shopping_cart WHERE id=$_POST[id] LIMIT 1";
$result_id = mysql_query($sql_id);
$row_id = mysql_fetch_assoc($result_id);
$sql_remove = "DELETE FROM shopping_cart WHERE id=$_POST[id] LIMIT 1";
if (mysql_query($sql_remove)) {
$sql_remove2 = "DELETE FROM shopping_cart_single WHERE singleid=$_POST[id]";
mysql_query($sql_remove2);
}
mysql_close($conn);
exit();
先感謝您!
僅包括相關部分。
"Confirm": function() {
$.post("includes/inc_details.php", {
"type":"remove",
"id":rid
}).then(function() {
window.location.reload();
$(this).dialog("close");
});
},
記住AJAX中的A代表-異步!
編輯:要解釋發生了什么,這是瀏覽器的反應。
從shopping_cart中選擇* WHERE id ='“。$ _ POST [id]。”'LIMIT 1
您的問題是您沒有在$ _POST [id]周圍添加雙引號和點,
以及您的$ sql_remove,請仔細檢查您所有的$ _POST [id]是否為““。$ _ POST [id]”。
單擊對話框中的“確認”按鈕時,假定將.post到php文件中以進行進一步處理(該部分的代碼在下面), 完成后將重新加載瀏覽器窗口,然后關閉對話框。
您對reload()
調用是在 $.post()
調用之后。 因此,您告訴瀏覽器發出POST請求,然后立即重新加載頁面。 由於您是在發送POST請求之前重新加載頁面的,因此您可以取消POST請求。
您需要將對reload()
的調用移到傳遞給$.post()
的回調函數中。
更好的是:不要使用Ajax。 只需提交常規表格,並使服務器端處理程序重定向到您要重新加載的URL。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.