2009-11-02 60 views
1

我想能夠調用一個URL,可以是標準HTTP GET或AJAX調用。如何使用jquery向ajax調用添加參數?

根據請求是否是AJAX請求,服務器需要稍微不同地處理請求。

使用jQuery,我想自動添加一個參數給我所做的所有AJAX請求,以便服務器可以識別它們,並且無需在我撥打電話的任何地方添加參數。

我試過用jQuery.ajaxSend事件處理程序來做這件事,但是在那個時候,XMLHttpRequest已經被構建,並且對ajaxOptions對象的URL或數據成員進行了更改,並沒有任何效果,不知道如何可靠地操作XMLHttpRequest對象(我可以在Firebug中檢查它,但我不知道我可以期望以跨瀏覽器的方式工作)。

我該怎麼做到這一點?有沒有更好的方法來確定AJAX請求?

回答

2

我認爲這將是更好,更簡單的測試對於x-requested-with頭設置爲XMLHttpRequest在服務器端值,以區別於那些正常的Ajax請求。注意:欺騙該標題非常容易。這裏有一個簡單的PHP例子:

function isAjax() { 
    return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && 
     ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')); 
} 

if(isAjax()) { 
    // do something 
} else { 
    // do something else, or nothing 
} 
+0

你總是保證得到這個頭?在所有瀏覽器中?很容易欺騙標題是不重要的,沒有額外的數據暴露,它只是以不同的格式返回。 – SpoonMeiser 2009-11-02 15:12:08

+0

@SpoonMeiser - 我相當肯定你是,我在生產中使用上面的代碼,它可以在我測試過的所有瀏覽器(與jQuery支持的瀏覽器相同)上運行。 – karim79 2009-11-02 16:26:14

+0

@SpoonMeiser - 它由支持ajax請求AFAIK的所有最新瀏覽器發送。 – karim79 2009-11-02 16:30:11

1

只是讓你自己的函數調用$.ajax但其添加:

function myAjax(opts) { 
    opts.data = opts.data || {}; // make sure it exists 
    opts.data.myParam = "42"; 
    $.ajax(opts); 
} 

然後調用其他地方。正如karim79所說,您還可以檢查X-Requested-With: XMLHttpRequest標題。但是,是的,這兩種方式都很容易欺騙,所以請客戶用一粒鹽給你送什麼。

相關問題