【发布时间】:2011-08-23 15:08:32
【问题描述】:
我正在使用 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;
});
如您所见,我必须使用相同的选项将 $.ajax 调用替换为 $(this).ajaxSubmit() 调用。此外,我必须根据某些字段创建一个查询字符串(代码中的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 选项,如下所示:
data: { key1: 'value1', key2: 'value2' }
但我不知道如何将我的查询字符串转换为 JSON 对象,以及它是否会在 PHP 端被解释为数组。
有解决办法吗?
编辑:即使我使用 iframe,我也不知道如何添加带有非来自表单的信息的查询字符串(我的 serialAnswer 来自上面的代码)。
【问题讨论】:
-
如果可能的话,我宁愿不使用闪存
标签: php jquery ajax forms file-upload