我正在使用jQuery,並且想用Ajax上傳文件。我做了一些搜索,發現它是不可能的。使用jQuery的「表單插件」來上傳Ajax文件
但是,有一個jQuery插件jQuery Form Plugin,它允許我們通過Ajax上傳文件。
它工作得很好,但我有一個特殊的問題。這裏是我的代碼:
$('#question-form').submit(function() {
var serialAnswers = '';
// Create a query string given some fields
// Format of the query string : answers[0][fr_fr][0]=a1fr&answers[0][fr_fr][1]=2&answers[0][en_uk][0]=a1en&answers[0][en_uk][1]=6&...
$('#question-answers > div').each(function(idx, elt) {
$('div[lang]', $(elt)).each(function(idxLang, eltLang) {
var lang = $(this).attr('lang');
serialAnswers += 'answers[' + idx + '][' + lang + '][0]=' + $("[answerpart=display]", $(eltLang)).val();
serialAnswers += '&answers[' + idx + '][' + lang + '][1]=' + $("[answerpart=value]", $(eltLang)).val() + '&';
});
});
$(this).ajaxSubmit({
datatype: "html",
type: "POST",
data: serialAnswers,
url: $(this).attr("action"),
success: function(retour) {
$('#res-ajax').html(retour);
}
});
return false;
});
正如你所看到的,我有一個$(this).ajaxSubmit()
調用替換$.ajax
調用,使用相同的選項。此外,我必須根據一些字段創建一個查詢字符串(代碼中的serialAnswers),以便將其傳輸到PHP代碼。
這是當我沒有文件上傳時我曾經做過的事情。我只是序列化的表單字段,並添加我的命名serialAnswers查詢字符串:
$.ajax({
datatype: "html",
type: "POST",
data: $(this).serialize() + '&' + serialAnswers,
url: $(this).attr("action")
success: function(retour) {
$("#res-ajax").html(retour);
}
});
但我的問題是,表單插件發送我的附加數據(查詢字符串)這種方式(在PHP文件):
Array
(
[question_heading_fr_fr] => something
[question_heading_en_uk] => nothing
[question_type] => 5
[0] => a
[1] => n
[2] => s
[3] => w
[4] => e
[5] => r
[6] => s
[7] => [
[8] => 0
[9] => ]
[10] => [
[11] => f
[12] => r
[13] => _
[14] => f
[15] => r
[16] => ]
....
)
根據該文件,我有一個JSON對象傳遞給數據選項,如:
data: { key1: 'value1', key2: 'value2' }
但我不知道該如何處理我的查詢字符串轉換成JSONØ對象,如果它將被解釋爲PHP端的數組。
有沒有解決方案?
編輯:即使我使用iframe,我不知道如何添加與信息的查詢字符串,它並非來自表單(我serialAnswer
從上面的代碼)。
[Uploadify](http://www.uploadify.com/)? – ifaour 2011-05-11 20:24:58
如果可能,我不想使用閃存 – 2011-05-11 20:58:02