使用数据从 jQuery 重定向
-
12-11-2019 - |
题
我有一个由服务器生成的 URL。在客户端中,我不知道 URL 是否为: http://url/parameter
或者 http://url/parameter?anotherPar=1
.
该值可用于 JavaScript 变量:
var theUrl = '{someURLgeneratedByTheServer}';
我想用 window.location.href
传递一些参数,但我不能这样做:
window.location.href = theUrl + '?someClientGeneratedParameter=value&secondParameter=value2';
因为如果服务器生成的 URL 已经有一些查询字符串参数,则此操作无效。我知道当我使用 jQuery 的 Ajax 方法时,我可以使用 options 参数传递带有所需查询字符串参数的数据对象,并且 jQuery 本身能够决定是否必须与 ? 连接。或&,像这样:
$.ajax({
type: "GET",
url: theUrl,
data: {someClientGeneratedParameter:'value', secondParameter:'value2'},
success: callback
});
有没有办法在调用之前使用 jquery 的这种 concat 机制进行重定向 location.href
?(如下所示):
//supposition only, when theUrl equals 'http://url/parameter?anotherPar=1'
var finalUrl = $.getMyFinalUrl({url: theUrl,
data: {someClientGeneratedParameter:'value', secondParameter:'value2'}
});
window.location.href = finalUrl ;
这有意义还是我应该编写自己的方法?
谢谢。
附:在服务器上使用Asp.net MVC3 + C#。
解决方案
像这样的事情怎么样?撕掉演示代码,非常简单,让你通过数组传递参数:
function getURL(theUrl, extraParameters) {
var extraParametersEncoded = $.param(extraParameters);
var seperator = theUrl.indexOf('?') == -1 ? "?" : "&";
return(theUrl + seperator + extraParametersEncoded);
}
// Test1
var theUrl1 = "http://example.com/test"
var extraParameters1 = {
"someClientGeneratedParameter": "value",
"secondParameter": "value2"
};
alert(getURL(theUrl1, extraParameters1));
// Test2
var theUrl2 = "http://example.com/?test=test"
var extraParameters2 = {
"someClientGeneratedParameter": "value",
"secondParameter": "value2"
};
alert(getURL(theUrl2, extraParameters2));
输出:
http://example.com/test?someClientGenerateParameter=value&secondParameter=value2 http://example.com/?test=test&someClientGeneratedParameter=value&secondParameter=value2
其他提示
在附加数据之前检查 url 的简单表达式就足够了:
location.href.match(/(\?|&)anotherPar($|&|=)/)
这会告诉你是否需要附加 ?
或者 &
.
不隶属于 StackOverflow