私はjQueryファイルアップロードライブラリ( http://github.com/blueimp/jQuery-File-Upload )を使用していますが、次の条件を満たすライブラリの使用方法がわからなくなりました。
これがjsFiddleです。投稿リクエストを2回送信し、最初のリクエストがキャンセルされるという点で、これは奇妙な動作をしています。
@CBroeのコメントのおかげで、リクエストが2回送信される問題が修正されました。ただし、リクエストパラメータのキーが正しく設定されていません。ここに更新されたjsFiddleがあります。
Jsコードのコア部分は次のようになります。
$(document).ready(function(){
var filesList = []
var elem = $("form")
file_upload = elem.fileupload({
formData:{extra:1},
autoUpload: false,
fileInput: $("input:file"),
}).on("fileuploadadd", function(e, data){
filesList.Push(data.files[0])
});
$("button").click(function(){
file_upload.fileupload('send', {files:filesList} )
})
})
これを機能させる方法を誰かが知っていますか?
解決しました。
フィドル: http://jsfiddle.net/BAQtG/29/
そしてjsコード
$(document).ready(function(){
var filesList = [],
paramNames = [],
elem = $("form");
file_upload = elem.fileupload({
formData:{extra:1},
autoUpload: false,
fileInput: $("input:file"),
}).on("fileuploadadd", function(e, data){
filesList.Push(data.files[0]);
paramNames.Push(e.delegatedEvent.target.name);
});
$("button").click(function(e){
e.preventDefault();
file_upload.fileupload('send', {files:filesList, paramName: paramNames});
})
})
以下に示すように、return false;
を追加する必要があります。
$("button").click(function(){
file_upload.fileupload('send', {files:filesList} )
return false;
})
または、type="button"
属性を指定します。
<button type="button">send by fileupload send api</button>
formData
を設定するには、以下を使用します。
$("button").click(function () {
file_upload.fileupload('send', {
files: filesList,
formData: {
json: JSON.encode({
extra: 1
})
}
})
})
特にJSFiddleの場合、応答でextra
値を取得するには、それをエンコードしてプロパティに割り当てる必要がありますjson
という名前です。
ここ は実用的な例です。
ボタン送信フォーム(2番目のPOSTリクエストの原因)であるため、スクリプトによってトリガーされた最初のPOSTリクエストはキャンセルされます。
使用する type="button"
button
に送信しない場合は、送信機能を必要とします。