私はAJAXを使用してファイルをアップロードしようとしていますが、私は403サーバーレスポンスを取得します...しかし、 AJAXリクエスト、それは正常に動作します。ここに私のHTMLは次のとおりです。ファイルアップロードはフォームとしてはうまく動作しますが、AJAXクエリーが返されると、403
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Test</title>
<script type="text/javascript">
function importFileAJAX() {
fileData = $('#importfileAJAX').prop('files')[0];
formData = new FormData();
formData.append('file', fileData);
$.ajax({
method: "POST",
url: "testimportfiles.php",
data: formData,
processData: false
}).done(function(xml) {
alert($(xml).find('result').text());
}).fail(function(jqXHR, errorText, exceptionText) {
alert("Error: " + jqXHR.responseText);
});
}
</script>
</head>
<body>
AJAX: <input id="importfileAJAX" type="file" />
<button onclick="importFileAJAX();">Import Files</button>
<hr />
<form action="testimportfiles.php" method="post" enctype="multipart/form-data">
Non-AJAX: <input type="file" name="file" id="file">
<input type="submit" value="Import Files" name="submit">
</form>
</body>
</html>
私のPHPファイル(testimportfiles.php
)はまさにこのです:
<?php
header('Content-Type: text/xml');
print("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root>");
print("<result>0</result>");
print("</root>");
第2の方法はうまく動作しますが、最初のメソッドはサーバーから403エラーを返します。これは私のサーバーの設定上の問題ですか、私は自分のコードで間違ったことをしていますか?
ありがとうございます!
編集:私はそこに良い方法はありますが、私は動的にフォームを作成し、動的に作成されたiFrameに対する応答を標的とすることによって、AJAX要求を模倣し、AjaxFileUpload.jsを使用して私の問題を解決してきた場合には未回答この質問を残しています。その後、サーバーの応答がiFrameからコピーされます。
真のAJAXトランザクションが可能な場合(つまり、ブラウザウィンドウやiFrameをサーバレスポンスのターゲットとして使用しない場合)、これは私の現在のプロジェクトではうまくいくでしょうか。
あなたはどんな違いを探すために他のフォームの呼び出しにAJAX呼び出しを比較するために、あなたのブラウザのネットワークタブ内の要求で見たことがありますか? – Taplar
フォームにenctypeが設定されていることにも気付きました。ajax呼び出しのデフォルトのcontentTypeはapplication/x-www-form-urlencodedです。 charset = UTF-8 – Taplar
@Tobyは 'バックエンド'で 'クッキー 'で'認証'していますか? –