簡體   English   中英

對PHP的AJAX調用接收“先前”發布的數據

[英]AJAX call to PHP receives the “previous” posted data

因此,我使用jQuery表單擴展名發布了表單中的數據。 當用戶在HTML頁面上按下["Save"]時,將執行此代碼。

$('#myform').ajaxForm({
    async: false,
    cache: false,
    target: $(this).find('.save-response'),
    beforeSubmit: function(arr,$form){
        json_ = JSON.stringify (vars.table_settings[aux.getTableId()].by_ix); //, null, 4);
        $form.find('.user-settings').val(json_);
        $form.find('.save-response').stop(true,true).hide().show();
        alert (json_);
    },
    success: function(){
        $(this).fadeOut(15000);
    },

如您所見,我使用alert()函數檢查AJAX調用中實際傳遞給目標PHP文件的內容。 我看到的是以下內容:

[
...
{"id":"colpartdesc","vis":"vis","width":500,"ix":3,"desc":"Part Desc."},
...
]

在PHP文件上,我讀取了$_POST值,並將其作為響應返回到調用頁面(在此示例中為.save-response元素)。 我得到的答復是:

[
...
{"id":"colpartdesc","vis":"vis","width":270,"ix":3,"desc":"Part Desc."},
...
]

如您所見, "width"值不同。 實際上,值270是我上次按下["Save"]按鈕時發送的值。 如果再次按下["Save"] ,服務器將收到此呼叫中發送的500值。 但是到那時500的值可能是錯誤的。

如果在更改輸入之前每次按兩次["Save"]按鈕,則該功能將按預期工作。

如您所見,我已經禁用了Ajax調用中的cache ,所以我認為這不是問題。

有誰知道我為什么要經歷這種行為?

此外:原始的HTML頁面是使用Smarty模板引擎生成的。 但是,我也已經關閉了Smarty引擎中的緩存,因此,我再次認為這並不重要。 另外,處理Ajax調用的PHP文件也不使用Smarty模板。

問題的答案是我不知道jQuery Form插件的工作方式。

jQuery Form不提交表單字段中的值,而是提交數組中的值。 因此,使用beforeSubmit函數更新表單本身中的值(如以下行所示)是不正確的:

$form.find('.user-settings').val(json_);

我應該做的是更新表單數據數組,如下所示:

$('#myform').ajaxForm({
    $(this).ajaxForm({
        target: $(this).find('.save-response'),
        beforeSubmit: function(formData,$form){
            json_ = JSON.stringify (vars.table_settings[aux.getTableId()].by_ix); //, null, 4);
            formData[1].value = json_;
            $form.find('.save-response').stop(true,true).hide().show();
        },
        success: function(){
            $(this).fadeOut(15000);
        },
    });

>> this <<帖子的答案使我處於正確的軌道。

暫無
暫無

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

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