0

私はjavascriptを初めて使い、この問題の解決策を一日中探し回っています。多くの質問/回答が見つかりましたが、何も機能していません。

ファイルのアップロードを含むページがあり、このファイルをサーバー側の検証ルーチンで実行し、検証結果をページに表示したいと考えています。これは、IE (Safari、Chrome & Chromium、Firefox) 以外のすべてでうまく機能しています。

IE でファイルのアップロードを機能させるには、ユーザーは送信ボタンを使用してフォームを送信する必要があります。そこで、HTML で条件付きコメントを使用してページに追加します。JavaScript では、ここで見つけた IE 検出関数を使用します。この部分は正常に動作します。

ajax リクエストを行う関数は次のとおりです。

function handleUpload()
{
    showSpinner();

    var dFile = new FormData(document.getElementById("devConsValidate")); // this works in IE but only if called by a submit method 

    $.ajax(
    {
        cache: false,
        async: false,
        url: 'validator.php',
        type: 'POST',
        data: dFile,
        dataType: 'JSON',

        processData: false, // this is key for formdata
        contentType: false, // so is this

        success: function(response)
        {
            var result = response.result;
            var validationCode = response.validation_code;
            var errors = response.errors;

            var htmlCode = '<h2>';

            if (result == 'SUCCESS')
                htmlCode += '<font color="green">';
            else
            {
                htmlCode += '<font color="red">';
            }

            htmlCode += 'Validation ' + result + '</font></h3>';

            if (result == "FAIL")
            {
                htmlCode += '</center>';
                for (var i in errors)
                    htmlCode += errors[i] + '<br>';

                htmlCode += '<br><a href="validator_help.php">Validator Help    </a>';
            }
            else
            {
                htmlCode += 'Please use the following code when submitting your request.<br><br><font color ="#00aa54" size="+2">' + validationCode + '</font>';
            }

            // make some beautiful html
            $('#resultsArea').html(htmlCode);
        },

        error: function (XMLHttpRequest, textStatus, errorThrown) 
        {
            alert('error: ' + errorThrown);
        }
    }); 
}

関数 handleUpload() は、ファイル変更イベントまたは送信されるフォームのいずれかで呼び出されます。validator.php は、値の json_encoded 配列を返します。

問題は、IE を使用している場合、ajax 成功のコールバックが起動されず、ブラウザーが未加工の JSON 文字列を空白のページに表示するだけであるため、ajax 呼び出しが機能し、期待されるデータが返されることです。他のブラウザーでは、成功のコールバックが発生し、json が解析され、適切なコードがページの div に挿入されます。

完全な JavaScript ファイル: http://pastebin.com/G9MYBis5

何か案は?

4

1 に答える 1