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 データが返されません。(この 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 データを受信するにはどうすればよいですか?

4

0 に答える 0