我遇到了一个问题,我一直在努力研究和解决几个小时,而我却在不知道为什么它不能正常工作。
当有人想要删除某个项目时(通过单击删除图标图像并使用提供的“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对话框 - 没有问题)。
HELP!
通过.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();
提前谢谢!
答案 0 :(得分:1)
仅包括相关部分。
"Confirm": function() {
$.post("includes/inc_details.php", {
"type":"remove",
"id":rid
}).then(function() {
window.location.reload();
$(this).dialog("close");
});
},
记住AJAX中的A代表什么 - 异步!
编辑:为了解释发生了什么,这是浏览器的反应。
答案 1 :(得分:1)
从shopping_cart中选择* WHERE id ='"。$ _ POST [id]。"'限制1
你的问题是你没有添加双引号并围绕$ _POST [id],
以及你的$ sql_remove,请仔细检查所有$ _POST [id]是'"。$ _ POST [id]。"'
答案 2 :(得分:0)
当"确认"单击对话框中的按钮,它将.post到php文件进行进一步处理(该部分的代码如下),完成后将重新加载浏览器窗口然后关闭对话框。
在 <iron-ajax method="POST"
contentType="application/json"
auto url="/stringCount"
body='{"stringInput":"sum String"}'
handle-as="json"
on-response="responseHandler">
</iron-ajax>
来电之后,您对reload()
的来电是。因此,您告诉浏览器发出POST请求,然后立即重新加载页面。由于您在发送POST请求之前重新加载页面,因此您将取消POST请求。
您需要将调用转移到$.post()
到您传递给reload()
的回调函数。
更好的是:不要使用Ajax。只需提交一份常规表单,让服务器端处理程序重定向到您要重新加载的URL。