Использование Redirect из jQuery с использованием данных - PullRequest
1 голос
/ 24 февраля 2012

У меня есть 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 уже имеет некоторые параметры строки запроса.Я знаю, что когда я использую метод jjuery Ajax, я могу использовать параметр options, передавая объект данных с необходимыми параметрами строки запроса, и сам jQuery может решить, с чем он должен согласиться?или &, например так:

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

Есть ли способ сделать перенаправление с использованием этого механизма concat jquery перед вызовом 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: использование Asp.net MVC3 насервер + C #.

Ответы [ 2 ]

4 голосов
/ 24 февраля 2012

Как насчет этого? Извлеките демонстрационный код, и это очень просто, и давайте передадим параметры по массиву:

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 голос
/ 24 февраля 2012

Достаточно простого выражения для проверки URL перед добавлением данных:

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

Это скажет вам, если вам нужно добавить ? или &.

...