Domanda

Ho un URL generato dal server.Essere nel cliente Non so se l'URL sarà: http://url/parameter o http://url/parameter?anotherPar=1.

Questo valore è disponibile per una variabile JavaScript:

  var theUrl = '{someURLgeneratedByTheServer}';
.

Mi piacerebbe usare window.location.href che passa alcuni parametri, ma non posso farlo solo:

  window.location.href = theUrl + '?someClientGeneratedParameter=value&secondParameter=value2';
.

Perché questo non sarebbe valido se l'URL generato dal server ha già alcuni parametri di queryString.So che quando sto usando il metodo AJAX di JQuery, posso utilizzare il parametro delle opzioni che passa l'oggetto dati con i parametri di querystring necessari e JQuery stesso è in grado di decidere Wheter che deve concat?o &, come questo:

   $.ajax({
            type: "GET",
            url: theUrl,
            data: {someClientGeneratedParameter:'value', secondParameter:'value2'},
            success: callback 
        });
.

C'è un modo per effettuare un reindirizzamento utilizzando questo meccanismo di concat di jQuery prima di chiamare location.href?(Qualcosa come sotto):

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

ha senso o dovrei scrivere il mio metodo?

Grazie.

PS: utilizzando ASP.NET MVC3 sul server + C #.

È stato utile?

Soluzione

Che ne dici di qualcosa del genere?Strappare il codice demo ed è molto semplice e facciamo passare i parametri per array:

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));
.

Uscita:

.

http://example.com/test?someclientgeneratedparameter=Value&secondparameter=Value2 http://example.com/?test=test&someclientgeneratedparameter=Value&secondparameter=Value2

Fiddle: http://jsfiddle.net/gjuqg/

Altri suggerimenti

Una semplice espressione per verificare l'URL prima di aggiungere i dati dovrebbe essere sufficiente:

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

Questo ti dirà se è necessario aggiungere ? o &.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top