Simple appel ajax semble être de blocage
Vraiment simple question. J'essaie de tester un service web Restful que je suis en train d'élaborer, et ont de ce simple appel ajax (à l'aide de jquery):
<script type="text/javascript">
$(document).ready(function() {
var url = '/index.php/gettest/reallyLongRequest';
$.ajax({
url: url,
dataType:'text',
success:function(data) { $('#result').html(data);},
error:function(xhr,err,e) { alert ("Error: " + err);}
});
});
</script>
Cela fonctionne que lorsque la page se charge. Comme il est en cours d'exécution, la page bloque; c'est à dire, (je peux voir le sablier à côté du pointeur de la souris) pas d'autres actions de l'utilisateur peuvent être traitées. (Btw, cette requête get--intentionnellement--prend un temps très long pour le retour).
Pourquoi est-ce? Un(asynchrone)JAX droit? Évidemment, je suis en train de débutants erreur. Toutes les idées, s'il vous plaît?
Lorsque je tente ce en utilisant un javascript (pas de bibliothèque), il fonctionne comme prévu. Est ce que cela a quelque chose à faire avec Jquery traitement de l'xhr onreadystatechange?
Merci pour la recherche.
EDIT: plusieurs personnes ont suggéré la création d'async: true, qui, comme il arrive, c'est la valeur par défaut de jquery, et en tant que telle n'a pas d'effet.
EDIT: Comme mentionné précédemment, si j'ai utiliser du javascript et de commencer ce avec une minuterie, par exemple, window.setInterval(function() { startLongPoll(); }, 5000)
Il met à jour comme prévu, sans apparaître à bloc. Des idées?
- Je n'ai aucune idée si cela est lié, mais avez-vous essayé sur un autre navigateur?
- Il se produit dans tous les navigateurs.
- Comme dirait ma précédente déclaration était fausse; après une inspection plus poussée, il ne se produit que dans google chrome. Des idées?
Vous devez vous connecter pour publier un commentaire.
Voici un exemple de ce que j'ai fait pour résoudre le problème:
Note: je suis en utilisant le court de main méthode jquery, "getJSON" qui est un wrapper pour l'appel ajax avec le type de données est défini sur "json". Cependant, cette solution fonctionne pour toutes les requêtes ajax.
Référencé:
Arrêter le navigateur "throbber de la mort" lors du chargement de la comète/server push iframe
Je pense que ce devrait être par défaut à true, mais essayez d'ajouter
async: true
à votre ajax json paramètre.Le code ci-dessous fonctionne comme prévu?
Pouvez essayer et d'Ajouter
async:true