2014-07-09 50 views
0

因此,我使用jQuery表單擴展從表單發佈數據。當用戶在HTML頁面上按下["Save"]時,將執行此代碼。AJAX調用PHP接收「之前」發佈的數據

$('#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模板。

回答

0

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

jQuery Form不會提交表單字段中的值,而是提交數組中的值。因此,在自身withing的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<<帖子的回答是什麼讓我在正確的軌道上。