アップロードした画像をプレビューしてフォルダに保存する ajax 関数を作成しました。問題は、ajax が 1 回しか呼び出されないことです。選択したファイルが画像でない場合、文字列が返され、新しい入力ファイル html が挿入され、古いファイル入力フィールドが置き換えられます。私は XHR に不慣れで、基本的なことしか理解していません。私の質問は、この ajax を 2 回呼び出すことは可能ですか。現在、Firebug は 1 つの aja 呼び出しのみを受け取ります。その後、どのファイルを選択しても何も起こりません。
var handleUpload = function (event) {
var fileInput = document.getElementById('url2');
var session_user_id = <?php echo $session_user_id; ?>;
var profile_user_id = <?php echo $user_id; ?>
var data = new FormData();
data.append('ajax', true);
data.append('file', fileInput.files[0]);
data.append('session_user_id', session_user_id);
data.append('profile_user_id', profile_user_id);
var request = new XMLHttpRequest();
request.upload.addEventListener('load',function(event) {
$('#upload_progress').css('display', 'none');
});
request.upload.addEventListener('error', function(event) {
$('#uploaded').html('Upload Failed!');
});
//code below is part of callback of ajax
request.addEventListener('readystatechange', function(event){
if (this.readyState == 4){
if (this.status == 200) {
var links = document.getElementById('uploaded');
var uploaded = eval(this.response);
$('#uploaded').empty();
if (uploaded[0] == 1 || uploaded[0] == 2 || uploaded[0] == 3) {
$('#uploaded').html('Some error occured!');
$('#container_for_url2').html('<input type="file" name="file" id="url2" />');
} else {
$('.preview_image_box2').html('<img width="' + uploaded[1] + '" height="' + uploaded[2] +'" style="position:relative;top:'+ uploaded[3]+'" src="' + uploaded[0] + '"/>');
}
}
} else {console.log('server replied with' + this.status)}
});
request.open('POST', 'ajax_upload_image_for_post.php');
request.setRequestHeader('Cache-Control', 'no-cache');
$('#upload_progress').css('display','block');
request.send(data);
};
url2
ここでは、入力ファイル フィールドにファイルが挿入されている場合に ajax 呼び出しを設定しています。これが問題だと思います。
$('#url2').change(function () {
handleUpload();
});