0

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

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 脚本。我在这些警报中添加了做简单的测试。显然,警报是主要功能的位置,并且在每个桌面浏览器上,我在提交表单后都会收到“ok”警报。另外,如果发出console.log(xml) 类型语句,我可以看到XML 在桌面浏览器上正确加载,功能正常。

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

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

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 数据?

4

0 回答 0