私は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
何か案は?