私は、アップロードを行うphpを使用して、ajaxを介して画像をアップロードするフォームの作成に取り組んでいます。背景によっては、xhr.readyState と .Status が実行されているように見え、upload.php が実行されているように見える問題が発生しています (サファリでは、upload.php を実行して実行しているように見えます... ajax/ を使用していません)。 javascriptデバッガーが多すぎます)が、elseステートメントを実行し(ステータス2、次に4になるためだと思います)、xhr.responseTextを実行します。残念ながら、upload.php を正しく実行していないようです (これは、php の問題である可能性があります)。私は先に進み、phpをprintステートメントに置き換えました.alert(xhr.response.Text)を実行すると空のアラートステートメントが表示され、問題がどこにあるのか途方に暮れています。以下は、フォーム コード、ajax コード、および応答を取得しようとしている php コードです。
誰かが私が抱えている問題を見ていますか? 私は AJAX を初めて使用し、しばらくの間 PHP を使用していません。私は ajax/javascript スキルの向上に取り組んでいますが、私の見解では ajax が正しく取得されていないようです。
HTMLコード
> <form action="scripts/upload.php" method="post"
> enctype="multipart/form-data">
> <label>Select a File to Upload</label> <input id="upload_file" type="file" name="upload_file" />
> <input type="button" onclick="loadFile()" value="Upload" /> </form>
JAVASCRIPT/AJAX コード
//LOAD IMAGES THROUGH JAVASCRIPT WINDOW.ONLOAD = INIT();
$(document).ready(function() {
// Handler for .ready() called.
$('.heading').click(function() {
if($(this).find('li').is(':visible')) {
$(this).find('li').slideUp('slow');
}else {
$('.heading').find('li').slideUp('slow');
$(this).find('li').slideDown('slow');
}
})
});
var xhr = createRequest();
function loadFile() {
//retrieve the FileList object from the referenced element ID
var myFileList = document.getElementById('upload_file').files;
//grab the first file object from the filelist
var myFile = myFileList[0];
//set some variables containing attributes of file
var myFileName = myFile.name;
var myFileSize = myFile.size;
var myFileType = myFile.type;
//alert the information gathered and if it is right
alert("FileName: " + myFileName + "- FileSize: " + myFileSize + " - FileType: " + myFileType);
//check above by alert if file size is below a certain MB and of image type JPEG, PNG, GIF
//Let's upload the complete file object
uploadFile(myFile);
}
function uploadFile(myFileObject) {
// Open Our formData Object
var formData = new FormData();
// Append our file to the formData object
// Notice the first argument "file" and keep it in mind
formData.append('my_uploaded_file', myFileObject);
// Create our XMLHttpRequest Object
xhr.onreadystatechange = addImage;
// Open our connection using the POST method
xhr.open("POST", 'upload.php');
//Send the proper header information along with the request
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
// Send the file
xhr.send(formData);
}
function addImage() {
if (xhr.readyState === 4 && xhr.status === 200) {
alert("WIN");
alert(xhr.responseText);
} else {
alert("ERROR ERROR: " + xhr.status);
}
}
AJAX リクエスト コード
function createRequest() {
try {
request = new XMLHttpRequest();
} catch (tryMS) {
try {
request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (otherMS) {
try {
request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (failed) {
request = null;
}
}
}
return request;
}
PHP コード
<?php
echo "hello";
?>
<?php
/*
define("UPLOAD_DIR", "../images");
if (!empty($_FILES["myFile"])) {
$myFile = $_FILES["myFile"];
if ($myFile["error"] !== UPLOAD_ERR_OK) {
echo "<p>An error occurred.</p>";
exit;
}
// ensure a safe filename
$name = preg_replace("/[^A-Z0-9._-]/i", "_", $myFile["name"]);
// don't overwrite an existing file
$i = 0;
$parts = pathinfo($name);
while (file_exists(UPLOAD_DIR . $name)) {
$i++;
$name = $parts["filename"] . "-" . $i . "." . $parts["extension"];
}
// preserve file from temporary directory
$success = move_uploaded_file($myFile["tmp_name"],
UPLOAD_DIR . $name);
if (!$success) {
echo "<p>Unable to save file.</p>";
exit;
}
// set proper permissions on the new file
chmod(UPLOAD_DIR . $name, 0644);
}
*/
?>
すべての PHP コードを貼り付けましたが、現在はエコー PHP コードを使用して応答を取得しているだけです。アップロードする php コードには (セキュリティ チェック以外に) 多くのことがあると確信しています。しかし、皆さんが私を正しい方向に向けたり、ajax呼び出しが機能しているかどうか、または機能していない理由を理解するのを手伝ってくれれば. 個人的には、応答テキストがないだけだと思います。実行する独自の PHP コードを作成するために Ajax を使用したのはこれが初めてです。