2010-11-26 7 views
1

Ce code fonctionne dans IE, FF, etc. Mais pas dans Safari. Je ne comprends pas ça.Safari jquery a href onClick?

J'ai un lien sur mon site:

<a href="/show/231" onClick="web('231')">Show</a> 

Maintenant le fichier .js:

function web(id) { 
    $("#showIMG").load("/web", { 
     id: id 
    }, function() {}); 
} 

"/ web" est un fichier PHP (web.php). Dans le web.php est seulement un code php, qui enregistre une valeur dans la base de données.

I Safari, la redirection (/ show/231) fonctionne. Mais ce n'est pas enregistrer la valeur dans la base de données. La "charge" ne fonctionne pas.

Je l'ai testé comme ça ici:

function web(id) { 
    $("#showIMG").load("/web", { 
     id: id 
    }, function() {}); 
    alert('clicked'); 
} 

Les travaux d'alerte. Mais pas la charge?

Quand je change le lien vers cette

<a href="#" onClick="web('231')">Show</a> 

la "charge" fonctionne, mais pas la redirection vers/show/231.

+0

Si quelqu'un a donné la bonne réponse, veuillez la sélectionner en cliquant sur la coche sous le compte de vote. En outre, vous voudrez peut-être penser à vous inscrire. J'ai fusionné vos trois comptes ensemble. – Will

Répondre

1

Lorsque Safari commence à naviguer vers la page suivante, il arrête votre requête AJAX. Pour éviter cela, vous devez empêcher le clic (en ajoutant return false; au gestionnaire), puis naviguer explicitement en définissant location.href dans le gestionnaire d'achèvement AJAX.

0

Il est possible que le changement de page annule la charge de l'image car l'image ne sera pas visible.

Vous pourriez avoir l'appel métho web faire la redirection en utilisant location.href = « » insted.

0

Depuis la fonction .load est asynchrone, la requête AJAX peut ne pas avoir le temps d'exécuter avant que le navigateur accède à «/show/231 ».

Compte tenu de votre exemple, je voudrais essayer de changer .load à .ajax et utiliser les paramètres suivants:

$.ajax({ 
    async: false, 
    url: '/web', 
    data: 'id=' + id, 
    success: function(){} 
}); 

Le « async: false » paramètre/valeur rend la synchronisation de requête AJAX asynchrone au lieu de ... qui devrait résoudre votre problème.