2010-09-12 10 views
5

Tengo la siguiente función JS activado por un botón:JavaScript: error ajaxSubmit

function uploadPicture() { 
    $("form#pictureUpload").ajaxSubmit({ 
     data: $("form#pictureform").serialize(), 
     type: 'post', 
     url: '?action=loadpicture', 
     success: function(response) { 
      $('#div-pictures').html(response); 
     } 
    }); 

}

Esto funcionó perfectamente bien durante varios meses. Pero dejó de funcionar hoy en Firefox, Safari, Chrome y Opera, aunque todavía funciona correctamente en Internet Explorer.

Safari me da el siguiente error misteriosa:

Failed to load resource: cancelled  ?action=loadpicture 

Chrome emite casi la misma (sin : cancelled). Opera y Firefox no muestran ningún error. La única información adicional es que los errores anteriores se producen después de que finaliza la carga del archivo y aunque el servidor genera una salida HTML como comentarios que los navegadores ignoran.

Háganme saber si tiene alguna idea de cómo solucionar esto. He estado corriendo en círculos durante horas sin siquiera acercarme a una solución: simplemente no veo errores en el código ni en los archivos de registro. ¡Muchas gracias!

+0

No sé la respuesta, pero hay algunas ideas para investigar: -No creo que sea correcto especificar? Parm = value cuando se realiza una solicitud POST. Normalmente, cuando haces una solicitud GET, todos los parámetros que proporcionas se añaden a la URL de esta manera; cuando PUBLICA, los valores se envían como datos de formulario. Intenta usar una entrada oculta. Podría estar equivocado acerca de esto, quizás esté permitido aunque no sea un uso normal. -Parece que está publicando en la misma página donde está definido este código, ¿no está seguro de si ese es el comportamiento correcto? -¿Estás usando una versión diferente de jQuery que antes? – RMorrisey

+0

Ninguna versión de jQuery es la misma. La única diferencia que conozco es una actualización menor de Apache y mod-php. – MrG

+0

¿'? Action = loadpicture' funciona como antes? ¿Has intentado llamar a esta URL sincrónicamente? – dmitko

Respuesta

5

Me tomó un tiempo, pero finalmente Lo averigué. Uno de nuestros administradores añadido a la configuración de Apache:

que causó un problema en cierta navegador debido al uso de iframe descrito en http://jquery.malsup.com/form/#file-upload. Después de cambiar a la siguiente todo funciona de nuevo (no hay cambios en el código!):

Header append X-FRAME-OPTIONS "SAMEORIGIN" 

De todos modos, el mensaje de error en Safari & Chrome son crípticos. El comportamiento extraño sin ningún mensaje de error en el otro navegador es aún peor.

+1

Asegúrate de aceptar esto cuando puedas, debería salvar a alguien más un dolor de cabeza más adelante :) –

0

Hmmm usted no debe estar usando la cadena de consulta en la URL, porque cuando se llama a serializar su va a conseguir convertir los datos en una consulta encadenan Prueba esto:

$("form#pictureUpload").ajaxSubmit({ 
     data: 'action=loadpicture&'+$("form#pictureform").formSerialize(), 
     type: 'post', 
     success: function(response) { 
      $('#div-pictures').html(response); 
     } 
    }); 
Cuestiones relacionadas