Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将用户重定向到不同的页面?_Javascript_Jquery - Fatal编程技术网

Javascript 如何将用户重定向到不同的页面?

Javascript 如何将用户重定向到不同的页面?,javascript,jquery,Javascript,Jquery,我需要根据浏览器的语言将用户重定向到另一个页面。例如:如果浏览器的语言为english则重定向到site.com/en/ 我试着这样做: $(document).ready(function () { var userLang = navigator.language || navigator.userLanguage; switch (userLang) { case 'en': window.location.href = windo

我需要根据浏览器的语言将用户重定向到另一个页面。例如:如果浏览器的语言为
english
则重定向到
site.com/en/

我试着这样做:

$(document).ready(function () {
    var userLang = navigator.language || navigator.userLanguage;

    switch (userLang) {
        case 'en':
            window.location.href = window.location.origin + '/en';
            break;
        case 'de':
            window.location.href = window.location.origin + '/de';
            break;
        default:
            break;
    }
});
$(document).ready(function () {
    var userLang = navigator.language || navigator.userLanguage;
    var urlToRedirect = '';

    switch (userLang) {
        case 'en':
            urlToRedirect = window.location.origin + '/en';
            break;
        case 'de':
            urlToRedirect = window.location.origin + '/de';
            break;
        default:
            break;
    }
    if(urlToRedirect!=='' && urlToRedirect!==window.location.href){
       window.location.href = urlToRedirect;
    }
});

它的作品,但网页不断被重新加载。如何解决该问题或提示其他解决方案?

由于您没有检查用户是否已在正确的语言站点上,因此页面会不断重新加载

在页面上,您可以为服务器端语言生成的页面存储javascript变量。例如:

var thisLanguage = 'en';
然后更改javascript逻辑以考虑这一点,并且仅当用户的语言与
thisLanguage
不同时才应用重定向:

$(document).ready(function () {
    var userLang = navigator.language || navigator.userLanguage;

    if (userLang != thisLanguage){

       switch (userLang) {
           case 'en':
               window.location.href = window.location.origin + '/en';
               break;
           case 'de':
               window.location.href = window.location.origin + '/de';
               break;
           default:
               break;
       }

    }
});

我认为您应该通过从URL读取来检测语言,因为您希望将用户重定向到适当的URL:

$(document).ready(function () {

    var languageSuffix = window.location.pathname;
    if(languageSuffix !== '/') {
        return;
    }

    var userLang = navigator.language || navigator.userLanguage;

    switch (languageSuffix) {
        case '/en':
            window.location.href = window.location.origin + '/en';
            break;
        case '/de':
            window.location.href = window.location.origin + '/de';
            break;
       default:
            break;
    }
});

我们可以检查url是否与当前url相同,如下所示:

$(document).ready(function () {
    var userLang = navigator.language || navigator.userLanguage;

    switch (userLang) {
        case 'en':
            window.location.href = window.location.origin + '/en';
            break;
        case 'de':
            window.location.href = window.location.origin + '/de';
            break;
        default:
            break;
    }
});
$(document).ready(function () {
    var userLang = navigator.language || navigator.userLanguage;
    var urlToRedirect = '';

    switch (userLang) {
        case 'en':
            urlToRedirect = window.location.origin + '/en';
            break;
        case 'de':
            urlToRedirect = window.location.origin + '/de';
            break;
        default:
            break;
    }
    if(urlToRedirect!=='' && urlToRedirect!==window.location.href){
       window.location.href = urlToRedirect;
    }
});

请尝试以下操作:

$(document).ready(function () {
    var url = $(location).attr('href');
    var userLang = navigator.language || navigator.userLanguage;

    if(url.indexOf("/en") == -1 && userLang == 'en') {
        window.location.href = window.location.origin + '/en';
    } else if (url.indexOf("/de") == -1 && userLang == 'de'){
        window.location.href = window.location.origin + '/de';
    } else {
        // Do nothing
    }
});

如果userLang输出是en-US,这怎么可能工作呢?在默认案例中,记录userLang的值并根据该值更正案例。顺便说一句,我根本不会在客户端上尝试这样做。这应该在服务器上完成。当它是
de
时,它会点击开关,重定向到
/de
,然后重新加载页面,然后再次执行相同的操作。它仍然会循环。你的第一个案子有什么意义?它永远不会碰到第一种情况。@JayMee这就是为什么
thisLanguage
依赖于服务器端构造在
/de
页面上会有一个变量
var userLanguage='de'
,因此它将匹配当前的
userLang
,并且不会重定向。我遗漏了什么吗?您刚刚对其进行了编辑,添加了“生成的服务器端”,现在有了意义。这在第一个例子中并不清楚,所以我认为你的意思是你在硬编码
en
。事实上,你建议使用服务器端实现(某种程度上)得到了我的支持。这不应该只在客户机上完成。