[英]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.