0

経由で送信できるフォームがform.submit()あり、回答は正しいです。今、ajaxを使用して送信したいのですが、ファイルを送信するときに問題が発生します。

フォームは非常に単純です。

<form name="Upload" enctype="multipart/form-data" method="post" action="upload.asp">
    <input type="file" name="file" id="fileinput"/>
    <input type="button" name="FileUpload" class="button" id="append_new" 
    onclick="xmlhttpPost('upload.asp', document.getElementById('fileinput').files[0]);" value="submit file"/>
</form>

私は次のようにajax呼び出しを受け取りました:

function xmlhttpPost(strURL, form) {
    var xmlHttpReq = false;
    var self = this;
    // Mozilla/Safari
    if (window.XMLHttpRequest) {
        self.xmlHttpReq = new XMLHttpRequest();
    }
    // IE
    else if (window.ActiveXObject) {
        self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
    }
    self.xmlHttpReq.open('POST', strURL, true);
    self.xmlHttpReq.setRequestHeader('Content-Type', 'multipart/form-data');
    self.xmlHttpReq.onreadystatechange = function() {
        if (self.xmlHttpReq.readyState == 4) {
            updatepage(self.xmlHttpReq.responseText);
        }
    }
    self.xmlHttpReq.send('file=' + file);
}

function updatepage(str){
    document.getElementById("fileitems").innerHTML = str;
}

ここでの問題は、サーバーが[object file]実際のファイルの内容ではなく文字列を取得することです。ファイルデータが送信されていることを確認するにはどうすればよいですか?

4

2 に答える 2

2

そのためにformDataを使用できます。

function xmlhttpPost(strURL, form) {
    var xmlHttpReq = false;
    var self = this;
    // Mozilla/Safari
    if (window.XMLHttpRequest) {
        self.xmlHttpReq = new XMLHttpRequest();
    }
    // IE
    else if (window.ActiveXObject) {
        self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
    }
    self.xmlHttpReq.open('POST', strURL, true);
    self.xmlHttpReq.setRequestHeader('Content-Type', 'multipart/form-data');
    self.xmlHttpReq.onreadystatechange = function () {
        if (self.xmlHttpReq.readyState == 4) {
            updatepage(self.xmlHttpReq.responseText);
        }
    }
    if ( !! window.FormData) {
        var formData = new FormData();
        formData.append('file', form);
        self.xmlHttpReq.send(formData);
    }
}

function updatepage(str) {
    document.getElementById("fileitems").innerHTML = str;
}

これは、進行中の完全なajaxファイルアップローダーの適切な例です

于 2013-03-26T15:24:12.880 に答える
0

あなたはこれを見逃しています:

self.xmlHttpReq.setRequestHeader("X_FILENAME", file.name);

これにより、通常のPOSTとアプリ層のファイルアップロードが区別されます。

PHPを使用している場合は、次のようになります。

$file = (isset($_SERVER['HTTP_X_FILENAME']) ? $_SERVER['HTTP_X_FILENAME'] : '');
于 2013-03-26T15:26:33.070 に答える