function abc()
{
console.warn("inside abc");
var req = getXMLHTTP();
console.warn("value of req" + req);
if (req) {
console.warn("inside if req");
req.onreadystatechange = function() {
console.warn("inside onreadychange");
if (req.readyState == 4) {
// only if "OK"
if (req.status == 200) {
var x = req.responseText;
} else {
alert("There was a problem while using XMLHTTP:\n" + req.statusText);
}
}
};
req.open("GET", "upload1.php" + queryString, true);
req.send(null);
}
}
我在保存按钮的onclick事件上调用此函数abc。
我想上传音频文件,为此我正在使用带有javascript的Ajax请求。
但是这里我在req.onreadystatechange之前得到了控制台消息。
我的控制权不在此req.onreadystatechange.function()中。
任何人都可以告诉我为什么会这样,以及如何解决这个问题?
我在控制台中没有收到任何类型的错误。
答案 0 :(得分:0)
它不适用于任何浏览器。我认为你没有定义getXMLHTTP()
。
您可以这样定义:
function getXMLHTTP() { //function to return the xml http object
var xmlhttp=false;
try{
xmlhttp=new XMLHttpRequest();
}
catch(e) {
try{
xmlhttp= new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e){
try{
req = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e1){
xmlhttp=false;
}
}
}
return xmlhttp;
}
检查这个小提琴:http://jsfiddle.net/joo4q90n/
您可以替换查询字符串。我刚给出了一些字符串用于测试目的。
P.S:Firefox os
,我认为你的意思是Firefox Browser
答案 1 :(得分:0)
您是否正在构建打包的Firefox OS应用程序?默认情况下,不允许跨源请求。你有几个选择。
更改为type: web
,以便您的应用不必遵守CSP(内容安全政策)。
在您的API端点上启用CORS,以便所有域都可以向其发出跨域请求(这可能对您的应用程序来说不够安全)。
使用type: privileged
权限将打包的应用转换为systemXHR
。这将允许您的应用程序发出跨域请求,但将您的应用程序接受到Firefox Marketplace可能需要更多审查。在此处解释:firefox OS app,CORS in Firefox os app