[英]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.