0

Dojo でファイルをアップロードするための完全なコードが必要です。特に、ajax 呼び出しとそのボタンの作成、およびその URL をデータベースに格納する必要があります。次のコードを使用していますが、機能していません。

function uploadPicture()
{
    alert("yes");
    var xhrArgs = {
        url:"/service/ajax/uploadPictureToOption/",                 
        form: dojo.byId("optionsForm"),
        handleAs: "json",
        content :{},
        load: function(response, ioArgs){
            if (response == "failed")
            {
                alert("Failed");
                window.location.reload();
            }
            else if (response == "success")
            {
                window.location.reload();
            }
            else
            {
                alert("Successfully deleted");
                window.location.reload();
            }
        },
    }
    var deferred = dojo.xhrPost(xhrArgs);
}
4

2 に答える 2

1

ファイルがバイナリであると仮定します。それ以外の場合は、Moz MDN - File.getAsBinaryを参照してください。オプションで、 FormData (xhr2) を利用できます。IE は IE10 まで HTML5 をサポートしていないため、IFrame が最適です。

var xhr=(window.XMLHttpRequest && new window.XMLHttpRequest()),
    input = dojo.byId('inputelementId')
    boundary = "---------------------------" + (new Date).getTime(),
    message = ""
xhr.open("POST", this.getUrl());
xhr.setRequestHeader("Content-Type", "multipart/form-data; boundary=" + boundary);
//      if(input.files.length > 1) {
    message += "--" + boundary + "\r\n" 
        + 'Content-Disposition: form-data; name="' + input.name + '";'
        + ' filename="'+ (input.files ? input.files[0].name : input.value) + '"' + EOL;
    message += "Content-Type: application/octet-stream" + "\r\n" + "\r\n";
//      }
if(!!xhr.sendAsBinary) {
        xhr.send(message + input.files[0].getAsBinary())
} else {
    // here is the kicker; IE does not support neither FileData nor AsBinary
        var fobj  = new ActiveXObject("Scripting.FileSystemObject"),
            fd    = fobj.OpenTextFile(input.value, 1); 
        xhr.send(message + fd.ReadAll());
        fd.Close();
}
于 2012-04-29T12:55:00.313 に答える
0

まず、ファイルのアップロードのアイデアは、現在、dojoのxhrモジュール(別名AJAX [プレーンテキストのみを処理する])を使用して実行することはできません。最も近い方法は、フォームを非表示のiframeに送信することです。

編集

非表示のiframeのコードは次のようになります。

<form method=”post” action=”formProcess.php” target=”hiddenIFrame”&gt;
<input type=”file” name=”test” />
<input type="submit" value="Submit">
</form>

<iframe style=”width:0px;height:0px;border:0px;” name=hiddenIFrame />

「hiddeniframesubmit」としてグーグルで検索することもできます

于 2012-04-25T23:56:33.773 に答える