2

Ajax を使用してファイルをアップロードしようとしていますが、ファイルの処理に問題があります... テスト目的で、次のような単純なコードを作成しました。

JS:

xmlhttp=new XMLHttpRequest();
xmlhttp.open("POST",document.getElementById('upload').action,true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
var cmdStr="q="+str;
xmlhttp.send(cmdStr);

document.getElementById("ResponseDiv").innerHTML=xmlhttp.responseText;

PHP:

$q=$_POST["q"];
echo $q;

正常に動作し、xmlhttp.responseText印刷され[object File]ます。

ただし、私の問題は、一時ファイル名を .xml で取得する必要があることです$_FILES["q"]['tmp_name']。そのために、コードを次のように変更しました。

JS:

xmlhttp=new XMLHttpRequest();
xmlhttp.open("POST",document.getElementById('upload').action,true);
xmlhttp.setRequestHeader("enctype","multipart/form-data");
var cmdStr="q="+str;
xmlhttp.send(cmdStr);

document.getElementById("ResponseDiv").innerHTML=xmlhttp.responseText;

PHP:

$q=$_FILES["q"]["tmp_name"];
echo $q;

問題は、今ではxmlhttp.responseText何も得られないことです。誰が私が間違っているのか知っていますか?

4

2 に答える 2

1

AJAX を使用してファイルをアップロードするには、この回答を確認してください。可能ですが、すべてのブラウザで互換性があるわけではありません。

jQuery アップロードの進行状況と AJAX ファイルのアップロード

--

あるいは、その場でアップロードしたい場合は、「Uploadify」というクールなライブラリを入手できます。オンザフライでファイルをアップロードできるようにするフラッシュ/jquery (または現在は HTML5) のリグです。フラッシュ バージョンでは、前回使用しました... コールバック関数を追加して、本質的に必要なことを何でも行うことができます。

いくつかの巧妙な JavaScript を使用すると、これを機能させることができます。

http://www.uploadify.com/

于 2012-10-23T15:14:13.200 に答える
0

AJAXはファイルのアップロードを行いません。そのために設計されていません。標準の回避策は、JSコードで非表示のiframeを構築し、その中で標準のPOSTタイプのアップロードを実行することです。そのため、実行しようとするとecho $_FILES['q']['error']、おそらく4「ファイルなし」になっているはずです。

于 2012-10-23T14:49:36.567 に答える