所以我使用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
,因此我认为这不是问题所在。
有没有人知道我为什么遇到这种行为?
除此之外:使用Smarty模板引擎生成原始HTML页面。但是,我也关闭了Smarty引擎中的缓存,所以我再也不认为这很重要。此外,处理Ajax调用的PHP文件不使用Smarty模板。
答案 0 :(得分:0)
问题的答案是我不知道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<<帖子的回答是让我走上正轨的原因。