2011-10-30 65 views
9

Usando la última versión de jQuery 1.6 en iOS 5 safari desde un iPad, me doy cuenta de que todas mis llamadas ajax están fallando. Estas mismas llamadas ajax funcionan como se esperaba en todos los otros navegadores que he probado, y estoy bastante seguro de que también estaban trabajando en la versión de iOS 4 de Safari (aunque podría estar equivocado). ¿Alguien más ha experimentado este comportamiento también? Si es así, ¿hay una solución o una solución? A continuación se muestra un ejemplo rápido de una llamada jQuery AJAX simple que devuelve un error en Safari de iOS 5. ¡Gracias de antemano por cualquier información!JQuery Las funciones AJAX no funcionan en iOS 5 Safari/iPad

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js"></script> 
    </head> 
    <body> 
    <a id="my-link" href="javascript:;">Click Me!</a> 
    <script type="text/javascript"> 
     jQuery(document).ready(function() { 
     jQuery("#my-link").bind("click", function() { 
      jQuery.get("test.php", function(data) { 
      alert(data); 
      }); 
     }); 
     }); 
    </script> 
    </body> 
</html> 
+1

La consola de error de Safari devuelve lo siguiente ... "XMLHttpRequest no puede cargar http: // www. .com/test.php. No se pueden realizar solicitudes desde nulo" – ajporterfield

+0

También debo mencionar que la llamada AJAX está haciendo un OBTENER solicitud para el mismo dominio. – ajporterfield

+0

http://bugs.jquery.com/ticket/10529 –

Respuesta

14

Tuve un problema similar en este momento. Tenía

$.ajax({ 
     type: 'post', 
     url: 'http://IP../ws', 
     data: {1:1}, 
     dataType: 'json', 
     success: function(response) { 
      if (lng.Core.toType(callback) === 'function') { 
       // setTimeout(callback, 100, response); 
       callback(response); 
      } 
     }, 
     error: function(xhr, type) { 
      console.log('error') 
      if (error) { 
       setTimeout(error, 100, result); 
      } 
     } 
    }); 

url cambiado: 'http: //IP../ws', a URL: 'ws',

no soy un usuario jQuery en absoluto, sino que usarlo para un proyecto, así que no estoy seguro de si esto es útil para usted o no, pero funcionó para mí.

+0

Estoy de acuerdo con Daithi. La única forma en que podía ejecutar mi llamada AJAX era utilizar una ruta RELATIVA en lugar de una ruta ABSOLUTA. – Doug

+0

Sí. Esto fue. Muerto en. Debe ser marcado como la respuesta correcta. –

+0

No puedo creer que esto lo haya solucionado, juro que la misma función estuvo funcionando durante más de un mes, y hoy dejó de ejecutar la función de devolución de llamada, quizás sea el resultado de una comprobación de seguridad falsamente positiva, ya que todavía estaba trabajando en Chrome y todos mis otros dispositivos. De todos modos, estoy feliz, ¡gracias! – tylerl

1

Reiniciar Safari: déjalo y elimínalo de las tareas en ejecución.

De otras cosas que he leído están relacionadas con contextos de seguridad y prevención de ataques de scripts entre sitios, y Safari no está haciendo las cosas bien cuando se ejecutaba previamente en una red diferente y ahora está en una nueva red sin tener sido detenido entre redes cambiantes.

Lo llevé a mi mismo hoy, con simple HTML/JavaScript/PHP XMLHttp Solicitud de solicitud.

0

Hay un error en Safari Mobile que repentinamente e inesperadamente da problemas con las llamadas AJAX si hay algún servicio de archivo en curso. Safari puede comenzar a enviar mensajes http "OPTIONS" en lugar de POST después de que se haya servido una descarga con un encabezado Content-Disposition: attachment;. Puede ver si esto está sucediendo utilizando Fiddler entre Safari Mobile y el servidor para ver qué mensajes HTTP está enviando Safari.

Esa "condición" en Safari Mobile se restablece cuando se reinicia.

Se revisó bien aquí Stackoverflow: JQuery Ajax stopped working with IOS 5.0.1.

1

Tuve que enfrentar un problema que la llamada jQuery ajax falla en IPad en el navegador Safari. Error es que no tienes permiso para acceder a la página/directorio. Soluciono el problema cambiando la propiedad async de Ajax a true.

$.ajax({ 
     type: 'GET', 
     url: "". 
     async: true, 
     cache: true, 
     crossDomain: false, 
     contentType: "application/json; charset=utf-8", 
     dataType: 'json', 
     error: function (jqXHR, err) { 
      console.log(jqXHR.responseText); 
      alert("Error" + jqXHR.responseText); 
     }, 
     success: function (data, status) { 

      }); 
0

He tenido que hacerlo para que vuelva a intentar hasta 20 veces por error para que funcione. Código de ejemplo:

function my_original_function(form) 
{ 
    my_original_function_ajax(form, 1); 
} 

function my_original_function_ajax(form, attempts) 
{ 
    console.log('Attempts #'+(attempts)); 

    jQuery.ajax({ 
    type: 'POST', 
    url: form.action, 
    processData: false, 
    data: $(form).serialize(), 
    cache: false, 
    success: function(html){ 
     console.log('success!!'); 
    }, 
    error: function (xhr, status, error) { 
     // make up to 20 attempts if error 
     if (attempts <= 20) { 
     my_original_function_ajax(form, attempts + 1); 
     } 
    } 
    }); 
} 
0

Yo tenía el mismo problema, pero me terminó descubriendo algo diferente totalmente.

tuve algo así como:

function load_one(var1 = null, var2 = null) { ... } 
function load_two() { ... } 

Y después de eso tuve

$(window).load(function() { 
    load_one(var_x, var_y); 
    load_two(); 
}); 

Todo funcionaba bien en Chrome, Firefox, Safari para OS X, Safari para iPhone, Chrome para iPhone, pero en Edge y Safari para iPad nada funcionó. Así que lo abrí en Edge y dentro de las herramientas de desarrollador estaba mostrando un error en la línea donde se definió la función load_one.

No estaba seguro de qué era pero el error decía ) expected así que decidí eliminar los valores predeterminados para los parámetros de la función y todo funcionó de repente. No estoy seguro de si JavaScript tiene problemas con los valores de parámetros predeterminados, pero aparentemente algunos navegadores tienen problemas con eso.

Cuestiones relacionadas