Я использую jQuery, и я хотел бы загружать файлы с помощью Ajax. Я сделал несколько поисков и обнаружил, что это невозможно.
Однако есть один плагин jQuery, Плагин jQuery Form , который позволяет загружать файлы через 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.
Есть ли решение?
EDIT : Даже если я использую iframe, я не знаю, как добавить строку запроса с информацией, которая не приходит из формы (мой serialAnswer
из кода выше).