用jQuery 的都知道,jQuery 的get 和post 方法有三個參數:位址,資料和回呼函數,但我們知道位址也可以跟隨資料的(形如:get_data.php?v1=1&v2=2),而且第二個參數可以省略,也就是第二個參數可以直接寫回呼函數,那麼資料寫在位址後面和寫在data 參數裡有什麼差別呢?
剛剛做了幾個實驗,看看下面的程式碼就清楚了:
以下內容需要回覆才能看到
jquery_data.php
echo "post: "; print_r($_POST); echo "get: "; print_r($_GET); ?>
jquery_test.html
實驗1:
$(function() { // post 方法,两处都有数据 $.post('jquery_data.php?v1=1', {v2: 2}, function(data) { $(' ').append(data).appendTo('body'); }); });
回傳結果:
post: Array ( [v2] => 2 ) get: Array ( [v1] => 1 )
實驗2:
$(function() { // post 方法,数据在地址后面, 第二个参数为回调函数 $.post('jquery_data.php?v1=1', function(data) { $('<pre/>').append(data).appendTo('body'); }); });
傳回結果,資料在 get 中:
post: Array ( ) get: Array ( [v1] => 1 )
實驗3:
$(function() { // get 方法,用 data 参数传值 $.get('jquery_data.php', {v2: 2}, function(data) { $('<pre/>').append(data).appendTo('body'); }); });
傳回結果,資料在 get 中:
post: Array ( ) get: Array ( [v2] => 2 )
實驗4:
$(function() { // get 方法,两处都有数据 $.get('jquery_data.php?v1=1', {v2: 2}, function(data) { $('<pre/>').append(data).appendTo('body'); }); });
回傳結果,兩處資料合併了,都在 get 中:
post: Array ( ) get: Array ( [v1] => 1 [v2] => 2 )
實驗5:
$(function() { // get 方法,两处都有数据,且变量名相同 $.get('jquery_data.php?v2=1', {v2: 2}, function(data) { $('<pre/>').append(data).appendTo('body'); }); });
傳回結果,資料在 get 中,且 data 參數中的資料覆蓋了位址後面的資料:
post: Array ( ) get: Array ( [v2] => 2 )
透過這幾個簡單的小例子不難看出,位址後面的資料永遠是以get 形式傳遞的,無論使用的是get 方法還是post 方法;而data 參數中的資料是根據方法決定傳遞方式的。
因此,為了避免混淆,建議大家盡量不要把資料寫在位址後面,而是統一放在 data 參數中。
當然,如果你想在用 post 方法時,同時利用 get 傳值,那麼就可以把要以 get 方式傳遞的資料寫在位址後面,把要以 post 方式傳遞的資料寫在 data 參數中。
總之方法是死的,人是活的,怎麼用還要看實際狀況。子曾經曰過:實踐是檢驗真理的唯一標準。沒事做實驗,掌握知識更強。