ajax http请求状态仅在移动浏览器上返回零

时间:2013-05-14 21:31:22

标签: php javascript xml ajax

我已成功使用此代码很长时间了:

function doXMLReq(url, data) {
    var req = false;
    if (window.XMLHttpRequest) { 
        req = new XMLHttpRequest();
        if (req.overrideMimeType) {
            req.overrideMimeType('text/xml');
        }
    }
    req.onreadystatechange = function() { doStuff(req); };
    req.open('POST', url, true);
    req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    req.setRequestHeader('Content-length', data.length);
    req.setRequestHeader('Connection', 'close');
    req.send(data);
}

function doStuff(req) {
    if (req.readyState == 4) {
        alert(req.status);
        if (req.status == 200) {
            alert('ok');
        }
    }
}

URL将帖子提交给返回XML的PHP​​脚本。我在这些警报中添加了进行简单测试。显然警报是主要功能的放置位置,并且在每个桌面浏览器上,我在提交表单后都会收到“确定”警告。另外,如果发出console.log(xml)类型语句,我可以看到XML在桌面浏览器上正确加载,功能正常。

由于某些原因,在移动浏览器(safari,android)上,req.status警报的值始终为0,并且不会返回XML数据。如果我将表单直接发布到URL(而不是使用此JS),浏览器将完美呈现XML。

URL与原始PHP文件位于同一目录中,位于同一域等。标头在PHP表单上正确设置,该表单通过URL传递。

header('Content-type: text/xml');

我认为它可能与https有关,因为这是遇到此错误的唯一页面,而且它也是https域中唯一可能的页面这段代码已经上百页了。

我也尝试使用jQuery的$.ajax,因为其他线程中的许多其他用户都建议使用jQuery可以解决跨浏览器问题。我重写了我的整个PHP脚本和我的大部分javascript以适应$.ajax,我必须承认我减少了有意义的代码,但XML HTTP请求仍然在移动浏览器上返回0。 ..这是我使用的代码:

function doForm() {
    var form = $('#i_form');
    $.ajax({
            type: form.attr("method") || 'post',
            url: "fooscript.php",
            data: form.serialize(),
            dataType: 'xml', //Disables xml autoparsing
            success: function(xml){
                    doXMLback(xml);
            },
            error: function(jqXHR, textStatus, errorThrown) {
                    alert(jqXHR.status);
                    alert(jqXHR.statusText);
            }
    });
    return false; 
}

function doXMLback(xml) {
    var errors = $(xml).find("errors").text();
    var success = $(xml).find("uri").text();
    if (errors) {
        errmsg = errors.split("|");
        errmsg = errmsg[1];
        $('#er').text(errmsg);
        return false;
    }
    if (success) {
        window.location = success;
    }
} 

(显然上面而不是提交的表单有一个div,它有一个简单的onclick函数,调用doForm()函数)......

如何让运行在3G / 4G上的移动浏览器提交到表单并使用ajax接收XML数据?

0 个答案:

没有答案