XMLHttpRequest将url作为响应文本发送,Firefox不重定向

时间:2017-02-14 16:12:35

标签: javascript php ajax firefox

我有一些javascript将XMLHttpRequest发送到PHP文件。这个PHP文件发送一个响应,javascript应该创建一个URL并重定向到它,使用响应文本作为参数。在所有其他浏览器中它工作正常,但Firefox不会在URL中包含响应文本。

这是javascript示例:

viewDidLoad

和filename.php目前只是一个数字:

var xhr = new XMLHttpRequest();
xhr.open('POST', 'filename.php', true);
xhr.onreadystatechange = function(e){
    var id = e.currentTarget.responseText;
    var urlWithId = "restofurl?id=" + id;
    window.location.href = urlWithId;
}
xhr.send(fd);

我已经尝试将url的其他部分(直到整个url)放在php部分中,而firefox总是会切掉那个部分。我还尝试将响应多次复制到不同的变量,逐个字符地复制它,将它放在一个只返回输入的函数中,...

这只会在我自己的计算机上,所以我不需要担心任何安全问题,所以我主要想找一个简单的方法来欺骗这个而不是专业的方式。有没有人有任何想法?

1 个答案:

答案 0 :(得分:-1)

这是一个基本示例,您实际上必须测试readyState状态。如果我记得很清楚,在发送请求之前设置事件函数也更安全(不太确定)。

xhr = new XMLHttpRequest();

xhr.onreadystatechange = function() {
    if (this.readyState == 4) {
        //do something with this.responseText
    }
};
xhr.open("POST", url, true);
xhr.send();

修改: 这是我使用框架的原因之一,对于旧的浏览器支持,但这不是一个答案。更确切地说,在过去(现在?),浏览器用于实现奇特的功能。很长一段时间我都懒得直接使用XHR对象,上次用于加载栏(画布)的文件上传。它向您展示了处理某些内容的基本方法。这个更长,有点老式,但它很有效。

function customXHR(){
    if(window.XMLHttpRequest){
        return new window.XMLHttpRequest;
    }else{
        try{ //the weird ones
            return new ActiveXObject("MSXML2.XMLHTTP.3.0");
        }
        catch(ex){
            return null;
        }
    }
}

var xhr = customXHR(), pleaseStop = false, startDraw = false;

if(xhr){
    xhr.addEventListener('load', function(e){
        var jsonRep;
        if(!pleaseStop){
            //did use a JSON response
            jsonRep = $.parseJSON(e.target.responseText);
            //do the rest, we finished
        }
    }, false);
    xhr.addEventListener('error', function(e){
        //error
        pleaseStop = true;
    }, false);
    xhr.upload.addEventListener('progress', function(e){
        //why not let this as an example!
        //file_size must be retreive separately, i fear
        if(e.lengthComputable && file_size > 0 && !pleaseStop && startDraw){ draw_progress(e.loaded / file_size); }
    }, false);
    xhr.addEventListener('loadstart', function(e){
        //can be used too
    }, false);
    xhr.addEventListener('readystatechange', function(e){
        if(e.target.status == 404 && !pleaseStop){
            //error not found
            pleaseStop = true;
        }
        if(e.target.readyState == 2 && e.target.status == 200){
            startDraw = true;
        }
        /*if(e.target.readyState == 4){
            //not used here, actually not exactly the same as 'load'
        }*/
    }, false);

    xhr.open("POST", url, true);
    xhr.send();
} //else no XHR support