Ajax请求在Firefox OS中不起作用

时间:2015-04-24 07:36:16

标签: javascript ajax firefox-os

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()中。

任何人都可以告诉我为什么会这样,以及如何解决这个问题?

我在控制台中没有收到任何类型的错误。

2 个答案:

答案 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应用程序?默认情况下,不允许跨源请求。你有几个选择。

  1. 更改为type: web,以便您的应用不必遵守CSP(内容安全政策)。

  2. 在您的API端点上启用CORS,以便所有域都可以向其发出跨域请求(这可能对您的应用程序来说不够安全)。

  3. 使用type: privileged权限将打包的应用转换为systemXHR。这将允许您的应用程序发出跨域请求,但将您的应用程序接受到Firefox Marketplace可能需要更多审查。在此处解释:firefox OS app,CORS in Firefox os app