2014-01-08 34 views
1

在某些情況下,我需要以編程方式向AJAX請求添加POST參數。如何在ajaxSend中正確添加數據參數?

我想是這樣的:

$(document).ajaxSend(function(event, jqXHR, ajaxOptions) { 
    ajaxOptions.data = "additional_key=additional_value&" + ajaxOptions.data; 
    ajaxOptions.context.data = "additional_key=additional_value&" + ajaxOptions.context.data; 
    console.log(ajaxOptions, 'ajaxOptions'); 
}); 

但additional_key沒有出現在$ _POST數組。

回答

9

您可以使用ajaxPrefilter此:

$.ajaxPrefilter(function(options, originalOptions, jqXHR) { 
    if (originalOptions.type !== 'POST' || options.type !== 'POST') { 
     return; 
    } 

    options.data = $.extend(originalOptions.data, { yourdata : yourvalue }); 
}); 

更多相關信息,請參閱http://api.jquery.com/jquery.ajaxprefilter/

+0

感謝,但我需要使用jQuery 1.4.4。使用Drupal 7和更新版本的jQuery會導致此平臺上的問題 – drupality

+0

在jQuery版本1.5上添加了ajaxPrefilter。 –

+3

你沒有提到jQuery版本btw。 –

2

測試你的上面的代碼給了我一個錯誤,ajaxOptions.context未定義。

首先,我建議你檢查它是否存在第一種:(假設上下文以往任何時候都被定義)

if(ajaxOptions.context) { 
    ajaxOptions.context.data = "additional_key=additional_value&" + ajaxOptions.context.data; 
} else { 
    ajaxOptions.data = "additional_key=additional_value&" + ajaxOptions.data; 
} 

發送過一個模擬的AJAX請求向我表明該數據通過傳遞在Firebug中進行檢查。

我通過刪除上下文線測試的代碼,它似乎工作:

代碼:

$(document).ajaxSend(function(event, jqXHR, ajaxOptions) { 
    if(ajaxOptions.context) { 
     ajaxOptions.context.data = "additional_key=additional_value&" + ajaxOptions.context.data; 
    } else { 
     ajaxOptions.data = "additional_key=additional_value&" + ajaxOptions.data; 
    } 
}); 

$.ajax({ 
    'url': 'test.php', 
    'data': {'foo':'bar'}, 
    'type': 'POST' 
}); 

檢查:

Key    Value 
additional_key additional_value 
foo    bar 

編輯:使用jQuery 1.7.1測試我注意到你正在運行一個較低版本的jQuery。

0
$(document).ready(function() { 
    $(document).ajaxSend(function(event, jqXHR, ajaxOptions) { 
     if (ajaxOptions.extraData) { 
      ajaxOptions.extraData.additional_key = 'additional_value'; 
     } 
    }); 
}); 

這只是我的工作(jQuery的1.4.4)

相關問題