我已成功使用此代码很长时间了:
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数据?