2012-01-10 138 views
1

我突然得到了一個非常奇怪的「錯誤」。到目前爲止,這個腳本已經像一個魅力。但突然formData變量沒有通過jQuery.ajax,就好像它不存在一樣。奇怪的行爲與jQuery.ajax

有趣的是,如果我觸發alert顯示數據,它都可以。但是,只要我刪除警報,php腳本告訴我formData索引丟失。

我無言以對是什麼原因導致這或如何解決這個問題: -/

這工作得很好我的開發服務器上,而不是在生產服務器上。

jQuery('#btn_saveForm').live('click', function() { 
    var instance = 'update'; 
    var brand_id = jQuery('#itemID').val(); 

    // Get form data 
    var form_data = jQuery("#data_form").serialize(); 

    // alert(form_data); //If I uncomment this, the script works... 

    //Process form data 
    jQuery.ajax({ 
     url: siteURL +"/wp-content/themes/my_theme/include/jquery.php", 
     data: { 
      instance : instance, 
      formData : form_data, 
      brandID : brand_id 
     }, 
     success: (function(feedback) { 
      showFeedback(feedback); 
     }), 
     dataType: 'json' 
    }); 
}); 
+0

這是一個瘋狂的猜測,但事實上它在dev上工作,但沒有部署時,建議我在服務器上建立MIME類型的問題,你實際上是否返回有效的JSON?可能是在Firebug中的提琴手或NET標籤。嘗試添加一個錯誤:函數(e){}塊,以及看看什麼是包含在e上的服務器(再次,通過螢火蟲 - 假設VS不可用) – SpaceBison 2012-01-10 11:05:35

+0

@SpaceBison - 謝謝。檢查FF中的NET選項卡會告訴我所有的數據都是實際發送的!但是在被調用的PHP代碼中執行'print_r($ _ REQUEST)'只顯示'instance'和'brandID'。 – Steven 2012-01-10 11:43:51

+0

@SpaceBison,它不返回任何東西,因爲PHP文件找不到'$ _REQUEST ['formData']'。 – Steven 2012-01-10 11:50:36

回答

0

嘗試重新啓動瀏覽器/更改瀏覽器到另一個,看看發生了什麼,然後

+0

這是在兩個不同的瀏覽器 – Steven 2012-01-10 11:05:21

1

我的猜測是,把在alert()允許form_databrand_id變量完全填滿發送AJAX請求之前。考慮到這一點,試試這個:

jQuery.ajax({ 
    url: siteURL +"/wp-content/themes/my_theme/include/jquery.php", 
    data: { 
     instance : instance, 
     formData : jQuery("#data_form").serialize(), 
     brandID : jQuery('#itemID').val() 
    }, 
    success: (function(feedback) { 
     showFeedback(feedback); 
    }), 
    dataType: 'json' 
}); 

或者,只是爲了測試,你可以在AJAX調用設置async: false,看看是否有差別。

+0

相同Rory McCrossan,我已經嘗試了你的解決方案,沒有運氣。該腳本在我的本地計算機和我的開發服務器上正常工作,但不在我的prod服務器上。在我修改了代碼之前,我一直在努力,但是我沒有更改這段代碼。 – Steven 2012-01-10 11:39:44

+0

PS。看到我的評論@SpaceBison – Steven 2012-01-10 11:45:14

+0

我發現,如果我使用'serializearray'我沒有得到這個錯誤。如果你有更好的提示,請告訴我: – Steven 2012-01-11 18:22:28

0

如果這是真的,你有一些比賽在這裏(這是很奇怪的,因爲JS是單線程的),下面應該可以幫助您:

setTimeout(function() { 
    jQuery.ajax({ 
     url: siteURL +"/wp-content/themes/my_theme/include/jquery.php", 
     data: { 
      instance : instance, 
      formData : form_data, 
      brandID : brand_id 
     }, 
     success: (function(feedback) { 
      showFeedback(feedback); 
     }), 
     dataType: 'json' 
    }) 
}, 0); 

的0超時建設將使您的代碼在執行隊列的末尾。

+0

沒有anny的效果。甚至將其設置爲1000。 – Steven 2012-01-10 11:48:09