私はこのコードを長い間うまく使ってきました:
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 データが返されません。(この JS を使用する代わりに) フォームを URL に直接投稿すると、ブラウザーは XML を完全にレンダリングします。
URL は、元の PHP ファイルと同じディレクトリ、同じドメインなどにあります。ヘッダーは、URL を介して渡される PHP フォームに正しく設定されています。
header('Content-type: text/xml');
https
これは、このエラーが発生した唯一のページであり、https
このコードが含まれているおそらく 100 ページのうちドメイン内の唯一のページでもあるため、 と関係があるのではないかと考えています。
jQuery の$.ajax
. PHP スクリプト全体とそれに対応するための JavaScript の多くを書き直しまし$.ajax
た。コードを大幅に削減したことは認めざるを得ませんが、0
モバイル ブラウザでは XML HTTP 要求がまだ返されます。使用したコードは次のとおりです。
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;
}
}
(明らかに、送信されるフォームの代わりに、関数を呼び出す単純な onclick 関数を持つ div がありdoForm()
ます)...
3G/4G で動作するモバイル ブラウザをフォームに送信し、ajax を使用して XML データを受信するにはどうすればよいですか?