Estoy usando jQuery, y me gustaría cargar archivos con Ajax. Hice algunas búsquedas y descubrí que no es posible.Carga de archivos Ajax con el "Complemento de Formulario" para jQuery
Sin embargo, hay un plugin jQuery, jQuery Form Plugin, que nos permite cargar archivos a través de Ajax.
Funciona muy bien, pero tengo un problema especial. Aquí está mi código:
$('#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;
});
Como se puede ver, tengo que sustituir la llamada $.ajax
por una llamada $(this).ajaxSubmit()
, con las mismas opciones. Además, tengo que crear una cadena de consulta (respuestas en serie en el código) de acuerdo con algunos campos para transmitirlo al código PHP.
Esto es lo que solía hacer cuando no tenía ningún archivo para cargar. Yo sólo serializado los campos del formulario y añadí mis cadena de consulta serialAnswers con nombre:
$.ajax({
datatype: "html",
type: "POST",
data: $(this).serialize() + '&' + serialAnswers,
url: $(this).attr("action")
success: function(retour) {
$("#res-ajax").html(retour);
}
});
Pero mi problema es que la forma de plug-in transmite mis datos adicionales (la cadena de consulta) de esa manera (en el archivo 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] => ]
....
)
Según la documentación, tengo que pasar un objeto JSON con la opción de datos, así:
data: { key1: 'value1', key2: 'value2' }
Pero no sé cómo convertir mi cadena de consulta a un JSON o bject y si se interpretaría como una matriz en el lado de PHP.
¿Hay una solución?
EDITAR: Incluso si uso un iframe, no sé cómo agregar una cadena de consulta con información que no provienen de la forma (mi serialAnswer
en el código anterior).
[Uploadify] (http://www.uploadify.com/)? – ifaour
Preferiría no usar flash, si es posible –