簡體   English   中英

jQuery .post參數未發送

[英]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代表-異步!

編輯:要解釋發生了什么,這是瀏覽器的反應。

  1. POST請求排隊等待提交。 異步的,所以不是立即的 請求比其他用戶操作花費更長的時間,因此它不會運行並阻塞UI線程。
  2. 窗口告訴重新加載。 瀏覽器取消所有待處理的請求-iframe,圖像, ajax請求 ,然后開始加載新頁面。
  3. (如果尚未重新加載,那么一旦javascript堆棧結束,它將實際發送請求)

從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.

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