2016-10-02 142 views
0

有沒有方法可以更改由JavaScript引起的請求的查詢字符串?我想爲我的HTML/JS應用程序發送的任何請求添加「& myParam = myValue」。更改JavaScript請求的查詢字符串參數

+0

通過 「JavaScript的誘導,」 你的意思'XMLHttpRequest'和'fetch'等? –

回答

1

我不認爲有任何內置的東西可以讓你這樣做。

在我的應用程序中,我總是有一箇中心函數XHR經歷,所以我有一個單點來做這樣的事情。如果你沒有這樣的或需要從第三方庫攔截來電:

可以XMLHttpRequest.open處理XHR的:

var originalOpen = XMLHttpRequest.open; 
XMLHttpRequest.open = function() { 
    var args = Array.prototype.slice.call(arguments); 
    args[0] += (args[0].indexOf("?") == -1 ? "?" : "&") + "myParam=" + encodeURIComponent("myValue"); 
    return originalOpen.apply(this, args); 
}; 

...然後類似的fetch。但看起來很脆弱。

或者,您可能會考慮使用cookie作爲參數,因爲瀏覽器會將cookie添加到請求中。 (假設請求將發送到您可以在代碼中添加Cookie的請求)。

+0

您的解決方案適用於我的頁面。你知道偶然嗎,如果有一種方法可以從包含的IFRAME中打包XMLHttpRequest?它看起來像同源政策阻止我這樣做 - 有沒有辦法解決它? –

+0

@ D.R .:如果iframe由不同來源提供,則SOP的確會阻止您的腳本訪問其JavaScript環境。所以你不能在其中包裝'XMLHttpRequest.open'。 –

+0

好的,太糟糕了...沒有解決方法。仍接受你的答案,因爲它回答了發佈的問題。 –

-1

在我看來,您在問如何在http請求中設置/編輯URL參數。這裏有一些非常相似的東西:here

如果您使用的是XMLHttpRequest,那麼鏈接中接受的答案應該完美。注意兩個關鍵的東西

  • url參數只是一個JavaScript對象,您可以將 轉換爲JSON字符串。這發生在JSON.stringify({myParam: 'hi'});
  • 的問題/答案鏈接正在POST請求,但你 可能不想讓這一請求,以及,我建議做哪些HTTP請求方法你想一些 研究 - https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
1

你可以使用部分應用程序在聲明提取函數時鎖定默認值,並實質上修飾將合併您的默認值和傳遞的參數的標準調用。

const fetchFactory = defaults => (url, data) => { 
 
    // make a copy of the defaults 
 
    const params = Object.assign({}, defaults) 
 
    // assign the passed in data with the defaults 
 
    params.body = JSON.stringify(Object.assign(params.body, data)) 
 
    // call fetch with the params 
 
    return fetch(url, params) 
 
} 
 

 
// create a default for POST using the factory 
 
const postFetch = fetchFactory({ 
 
    method: 'post', 
 
    headers: { 
 
    'x-requested-with': 'fetch', 
 
    'Authorization': 'basic:' + btoa('a secret') 
 
    }, 
 
    body: { 
 
    myParam: 'value' 
 
    } 
 
}) 
 

 
// now you can call your function 
 
postFetch('http://somewhere.com', { 
 
    one: 1, 
 
    two: 2 
 
}) 
 
.then(respone => response.json())