php - 使用 "Form Plugin"为 jQuery 上传 Ajax 文件

标签 php jquery ajax forms file-upload

我正在使用 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: { key1: 'value1', key2: 'value2' }

但我不知道如何将查询字符串转换为 JSON 对象,以及它是否会在 PHP 端被解释为数组。

有解决办法吗?

编辑:即使我使用 iframe,我也不知道如何添加查询字符串,其中包含不是来自表单的信息(我的 serialAnswer 来自上面的代码)。

最佳答案

尝试 Uploadify .这是 Flash基于上传插件。实现简单,支持多文件上传。

关于php - 使用 "Form Plugin"为 jQuery 上传 Ajax 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5970138/

相关文章:

php - Salesforce PHP 工具包选择查询

jQuery超大人像照片显示拉伸(stretch)

javascript - jquery ajax async false 不起作用

javascript - 如何使用带有 checkbox/html_data 插件的 jsTree 自动检查复选框?

PHP Excel 和 Codeigniter

php - 使用 Joins 在 Laravel View 中显示 Json 数据

php - 将 utf8 字符串拆分为字符数组

javascript - 如何发送js FormData

php - 在同一页面上显示 PHP 表单验证结果

php - 通过 ajax 或直接输出的行业标准代码 PHP 和 JSON 数据