1

我有一個由服務器生成的URL。在客戶端,我不知道URL是否是:http://url/parameterhttp://url/parameter?anotherPar=1使用重定向從jQuery使用數據

這個值是提供給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 ; 

是否有意義,或者我應該寫我自己的方法?

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

回答

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/

+0

這就是我想要的,'param'函數以及對indexOf進行自動驗證的功能。我想到jQuery會讓它可用,不僅在'ajax'和'post'方法中使用。謝謝! 我發現使用jQuery BBQ(http://benalman.com/projects/jquery-bbq-plugin/),我可能會做一些像'return $ .param.querystring(theUrl,$ .param(extraParameters ))'getURL'方法內。 我很欣賞。 關心, – ClayKaboom 2012-02-24 18:48:20

1

一個簡單的表達,以附加數據應該足夠了之前查詢的網址:

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

會告訴你,如果你需要附加?&

+0

但是如果我不知道anotherPar的名字? – ClayKaboom 2012-02-24 17:27:12

+2

這將使它更容易。而不是使用表達式只是使用indexOf檢查URL中的問號: 'if(location.href.indexOf(「?」)!= -1)' – 2012-02-24 18:10:47