使用数据从jQuery中使用Redirect

时间:2012-02-24 17:10:35

标签: javascript jquery asp.net-mvc-3 query-string querystringparameter

我有一个服务器生成的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 
        });

有没有办法在调用location.href之前使用jquery的这种concat机制进行重定向? (如下所示):

//supposition only, when  theUrl equals 'http://url/parameter?anotherPar=1'
var finalUrl = $.getMyFinalUrl({url: theUrl,
                 data: {someClientGeneratedParameter:'value', secondParameter:'value2'}
                });
window.location.href = finalUrl ;

是否有意义或我应该编写自己的方法?

感谢。

PS:在服务器上使用Asp.net MVC3 + C#。

2 个答案:

答案 0 :(得分:4)

这样的事情怎么样?撕掉演示代码,它非常简单,让你通过数组传递参数:

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?someClientGeneratedParameter=value&secondParameter=value2   http://example.com/?test=test&someClientGeneratedParameter=value&secondParameter=value2

小提琴:http://jsfiddle.net/gjuqG/

答案 1 :(得分:1)

在追加数据之前检查网址的简单表达式就足够了:

location.href.match(/(\?|&)anotherPar($|&|=)/)

这会告诉您是否需要附加?&