对PHP的AJAX调用接收“以前”发布的数据

时间:2014-07-09 22:51:18

标签: php jquery ajax html-form

所以我使用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模板。

1 个答案:

答案 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<<帖子的回答是让我走上正轨的原因。