2016-10-02 137 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())