jQuery .post params不发送

时间:2015-09-24 20:17:01

标签: php jquery

我遇到了一个问题,我一直在努力研究和解决几个小时,而我却在不知道为什么它不能正常工作。

当有人想要删除某个项目时(通过单击删除图标图像并使用提供的“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();

提前谢谢!

3 个答案:

答案 0 :(得分:1)

仅包括相关部分。

"Confirm": function() {
            $.post("includes/inc_details.php", {
                "type":"remove",
                "id":rid
            }).then(function() {
                window.location.reload();
                $(this).dialog("close");
            });
        },

记住AJAX中的A代表什么 - 异步!

编辑:为了解释发生了什么,这是浏览器的反应。

  1. POST请求排队等待提交。异步,所以不是立即。请求比其他用户操作花费的时间更长,因此它不会运行它并阻止UI线程。
  2. 窗口告诉重装。浏览器取消所有待处理的请求 - iframe,图片, ajax请求,然后开始加载新页面。
  3. (如果没有重新加载,那么一旦javascript堆栈结束,它实际上发送请求)

答案 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。