首页 > 解决方案 > Window.location.replace 不会重定向我给定的网址

问题描述

相反,它将我重定向到 main.js 的 url

function submitPOST(elementId, api, callback) {

    let input = document.getElementById(elementId).getElementsByTagName("input");

    let body = {};
    for (let i = 0; i < input.length; i++) {
        body[input[i].name] = input[i].value;
    }

    call('POST', api, body, callback);
}

function call(method, api,body, callback) {
    var xmlHttp = new XMLHttpRequest();

    xmlHttp.onload = function () {
        if (xmlHttp.status==200){
            callback(xmlHttp.response);
        }else{
            console.log(xmlHttp.response);
        }
    };
    xmlHttp.open(method, domainName+"/api/"+api, true); // true for asynchronous 
    xmlHttp.setRequestHeader("Content-Type", "application/json");
    xmlHttp.send(JSON.stringify(body));
}

function login(input){
    var response=JSON.parse(input);
    document.cookie="atoken="+response['data'];
    document.location.replace(domainName);
}

标签: javascriptweb

解决方案


当您在 domainName 变量中使用空字符串时,ajax 调用将正确,但替换不会。如果你正确调用它。例如:

submitPOST(id, api,登录)

尝试使用 console.log(或其他调试工具)向您显示重定向 url。

顺便说一句,您的情况可能 JSON.parse 会引发异常。将其放入 try-catch 块中

function login(input){
    try {
        var response=JSON.parse(input);
        document.cookie="atoken="+response['data'];
        console.log('redirect to', domainName);
        document.location.replace(domainName);
    } catch(e) {
        console.error('error in login process',e);
    }
}

推荐阅读