IE incompatability avec fenêtre.emplacement.href
Je suis en utilisant un rappel de l'AJAX requête post pour naviguer vers une nouvelle page, mais il ne fonctionne pas sur Internet Explorer. Mon code est comme suit:
$.ajax({
type: "POST",
url: phpUrl,
data: data,
async: false,
success: function() {
if (navigator.appName == 'Microsoft Internet Explorer'){ window.location.href("/step2.php")}
else{ window.location.href = "/step2.php"}
},
dataType:'json'
});
Cela fonctionne très bien sur FF/Safari/Chrome, mais quand je l'ai tester sur IE ça ne fonctionne pas. Est-il une meilleure façon de les rediriger vers une nouvelle page? Je suis en utilisant async:false
que mes données n'a pas de chargement sur google Chrome/Safari si je n'ai pas utilisé un rappel que la page changerait juste avant la POST
demande était complète.
OriginalL'auteur djq | 2012-04-18
Vous devez vous connecter pour publier un commentaire.
C'est les parenthèses.
href
n'est pas une fonction, donc essayer de l'appeler—window.location.href("/step2.php")
—est unTypeError
.Attribuer à
href
comme vous le faites sur la ligne suivante, ou mieux, utiliseremplacement.assign()
:Alors que vous pouvez affecter directement à
location
's propriétés (location.href='...';
) à cause du navigateur, je recommande à cet égard.En interne, c'est juste l'appel de
location.assign()
de toute façon, en lui attribuant des propriétés ne se comportent pas toujours de la même dans tous les navigateurs.Concernant,
async:false
, jamais faire. Si vous faites une synchrones demande XHR, vous le faites mal. 8.4% signalés IE9 pannes étaient dues à synchrone XHR bloquer le navigateur.Étant donné que vous avez en rappel, l'affectation à
location
n'arrivera pas jusqu'à ce que le POST, donc je ne suis pas sûr de ce que tu veux dire par "la page de changement avant le POST." (Avez-vous oublié d'annuler un formulairesubmit
?)location.assign("/step2.php");
ne fonctionne pas sur IE, mais fonctionne sur FF/Safari/Chrome. Ma tentative de l'utiliser comme une fonction a été basée sur la documentation que j'ai lu (@Hexxagonal visé également).Je prends votre remarque au sujet de la
async
- je l'ai enlevé. Merci pour les conseils.Jamais est un mot fort. Il est parfois nécessaire et utile pour l'ajax synchrone. Cependant, votre point est bien pris. Et dans les cas où le blocage est nécessaire, les développeurs doivent prendre soin de montrer visuellement que quelque chose se passe encore, c'est à dire un ajax loader gif.
C'est un cas où je suis à l'aise avec le mot jamais. Le point est que si vous utilisez synchrone XHR, vous pas afficher un loader gif parce que la demande XHR blocs de votre page à partir de rendu. Honnêtement, je pense qu'il y a pas de situation où async XHR ne peut pas être utilisé; et il y a trop d'inconvénients pour la synchronisation XHR de justifier l'utilisation de plus async.
Je l'ai utilisé en mélange avec de la fenêtre.emplacement.href...pensé comme une solution de repli pour ie, et il a fait ma question s'en aller. Il redirige correctement maintenant, au lieu de vous battre par d'autres scripts
OriginalL'auteur josh3736
window.location.href = "/step2.php"
est tout simplement parfait.msdn.microsoft.com/en-us/library/ie/ms533867(v=vs. 85).aspx
OriginalL'auteur Chris Li
C'est à dire uniquement comme url complète.
OriginalL'auteur user3012702