我有一些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总是会切掉那个部分。我还尝试将响应多次复制到不同的变量,逐个字符地复制它,将它放在一个只返回输入的函数中,...
这只会在我自己的计算机上,所以我不需要担心任何安全问题,所以我主要想找一个简单的方法来欺骗这个而不是专业的方式。有没有人有任何想法?
答案 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