سؤال

لدي عنوان ورل تم إنشاؤه بواسطة الخادم.يجري في العميل أنا لا أعرف ما إذا كان ورل سيكون : http://url/parameter أو http://url/parameter?anotherPar=1 .

هذه القيمة متاحة لمتغير جافا سكريبت:

  var theUrl = '{someURLgeneratedByTheServer}';

أود أن استخدام window.location.href تمرير بعض المعلمات ، ولكن لا أستطيع أن أفعل ذلك فقط:

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

لهذا سيكون غير صالح إذا كان عنوان ورل الذي تم إنشاؤه بواسطة الخادم يحتوي بالفعل على بعض معلمات كيريسترينغ.وأنا أعلم أنه عندما أستخدم طريقة أجاكس مسج يمكنني استخدام المعلمة خيارات تمرير كائن البيانات مع المعلمات كيريسترينغ المطلوبة, ومسج نفسها قادرة على أن تقرر ويتر لديها لسلسلة مع ?أو & ، مثل هذا:

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

هل هناك طريقة لجعل إعادة توجيه باستخدام هذه الآلية كونكات من مسج قبل استدعاء 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 مفك 3 على الخادم + ج#.

هل كانت مفيدة؟

المحلول

ماذا عن شيء من هذا القبيل?مزق رمز تجريبي وانها بسيطة جدا ودعونا لك تمرير المعلمات من قبل مجموعة:

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/

نصائح أخرى

يجب أن يكون التعبير البسيط للتحقق من عنوان ورل قبل إلحاق البيانات كافيا:

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

سيخبرك ذلك إذا كنت بحاجة إلى إلحاق ? أو &.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top