簡體   English   中英

如何將AJAX調用同步到php文件,並通過表單將數據發布到同一文件?

[英]How do I sync an AJAX call to a php file with posting data through a form to the same file?

我的問題是update.php僅獲取發布的表單數據( post_edit )。 先前通過AJAX發布的變量不會通過

Notice: Undefined index: id_to_edit in ...\update.php on line 5

Notice: Undefined index: column_to_edit in ...\update.php on line 6

我正在嘗試做的是:

我有一個回調函數,可跟蹤鼠標在桌子主體上的位置。 這樣做是為了檢測用戶想要編輯的單元格的列和ID-ID整數和列字符串通過AJAX發布到php文件中,並在SQL查詢中使用兩個值(用於坐標)在頂部用戶想要更新的數據(通過表單發布,稍后會有更多信息)。

編輯是通過以下方式完成的:當用戶將鼠標懸停在一個單元格上時,將在其中創建一個表單,然后填寫該表單應發布數據以更新SQL表中的相應條目(可通過使用回調函數中的坐標找到該條目) 。 鼠標移出將刪除表格。

換個說法

如何將坐標和表單數據發布到php文件中,以便可以在SQL查詢中使用所有這些值? 如果我一直在做的事情從根本上被破壞了,還有其他方法嗎?

$(function(){

    $("td")
    .hoverIntent(
        function(e){            
        var id_of_edit = $(e.target).siblings('th').text();
        var $clicked_column_i = $(e.target).index() + 1;
        var column_of_edit = $("#tableheader").children("th:nth-child(" + $clicked_column_i + ")").text();

        $.ajax({
            type: 'POST',
            dataType: 'text',
            url: 'update.php',
            data: { 
                'id_of_edit': id_of_edit,
                'column_of_edit': column_of_edit
                },

        });

        var $edit_button = $('<form action="update.php" method="post"><input type="text" name="post_edit"/></form>');

        $(e.target).append($edit_button);

        console.log(e.target.innerText + " was clicked");
        console.log(id_of_edit + " is the ID");
        console.log(column_of_edit + " is the column name");       
        //just to check the tracer function is working correctly
        },  

        function(e){            
        $id_of_edit = $(e.target).siblings('th').text();
        $clicked_column_i = $(e.target).index() + 1;
        $column_of_edit = $("#tableheader").children("th:nth-child(" + $clicked_column_i + ")").text();

        $(e.target).children('form').remove();
        });

});

update.php:

<?php

include 'config.php';

echo $_POST['id_to_edit'];
echo $_POST['column_to_edit'];
echo $_POST['post_edit'];


$stmt = $pdo->prepare('UPDATE food SET :column = :edit WHERE id = :id');
$stmt->execute([
    'id' => $_POST['id_to_edit'],
    'column' => $_POST['column_to_edit'],
    'edit' => $_POST['post_edit']
]);

?>

一個ajax請求和通過標准回發提交的表單是兩個單獨的 HTTP請求。 您的“ update.php”腳本將執行兩次 -對於每個單獨的請求一次,並且根據您在該請求中發送的內容,每個請求將具有獨立的POST變量集。 變量不會在請求之間持久存在-只是因為您將它們發送到相同的端點腳本並不重要。

概括地說:HTTP請求是無狀態的 -它們是獨立存在的,任何給定的請求都不了解先前或將來的請求。 每個腳本都會使命名的PHP腳本從頭到尾運行,就像以前從未運行過,並且可能永遠不會再次運行一樣。 除非您明確地對過去做任何事情,否則它對過去一無所知,對未來一無所知。

如果要在請求之間保留值,則必須自己存儲它們(在DB,Session,Cookie中,由您自己決定),然后在需要時檢索它們。


話雖如此,但查看服務器代碼並不清楚為什么仍然需要兩個單獨的請求-您正在SQL中執行單個UPDATE語句,因此使用一個HTTP請求將所有數據傳輸到SQL Server更有意義。服務器,然后執行運行UPDATE的腳本。 除非UI中有某種原因導致無法執行此操作,否則在這種情況下,您需要將值保留在兩次請求之間的某個位置。 根據您的描述,您可能會將單元格/列ID捕獲到生成的表單內的隱藏字段中,而不是通過ajax將它們立即發送到服務器。 當提交主表單時,隱藏字段值將與用戶生成的值一起發布到服務器。

另外,如果您確實使用鼠標的位置來確定單元格,這聽起來非常不可靠-瀏覽器窗口可以調整為任何大小。 確定將一個ID放在單元格的HTML標記內(例如,作為數據屬性),然后在單擊該單元格/將鼠標懸停在單元格上時可以讀取該ID會更可靠嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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