Comment puis-je faire un synchrone demande avec jQuery?
Pourquoi ne pas retourner cette fonction responseText?
function LoadBookmarksAsXml()
{
return $.ajax(
{
type: 'GET',
async: false,
url: 'http://www.google.com/bookmarks/?output=xml&num=10000'
}).responseText;
}
(Il fonctionne si je définir un succès-le rappel-la fonction et de l'ensemble async true!)
Merci à l'avance!!!!
Modifier: Ne vous inquiétez pas à propos de la croix-domaine d'appel; user603003 dit (dans un commentaire sur un désormais supprimé réponse) que c'est dans une extension Chrome où la croix-domaine les demandes sont autorisées.
La solution, si quelqu'un veut faire la même chose:
return $.ajax(
{
type: 'GET',
async: false,
url: 'http://www.google.com/bookmarks/?output=xml&num=10000',
});
(Vous obtiendrez un objet XMLHTTPRequest.)
Tu veux dire synchrone demande, non?
Vous pouvez poster, ce qui fonctionne? Peut-être quelque chose à faire avec une redirection?
"(Vous obtiendrez un objet XMLHTTPRequest.)" Comme de jQuery 1.5, vous obtiendrez un jqXHR objet: api.jquery.com/jQuery.ajax/#jqxhr
Vous pouvez poster, ce qui fonctionne? Peut-être quelque chose à faire avec une redirection?
"(Vous obtiendrez un objet XMLHTTPRequest.)" Comme de jQuery 1.5, vous obtiendrez un jqXHR objet: api.jquery.com/jQuery.ajax/#jqxhr
OriginalL'auteur ComFreek | 2011-02-04
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas tout de suite à voir pourquoi il n'est pas de retour, mais je préfère tout de même utiliser une
success
rappel:Même si
$.ajax
retourne unXMLHttpRequest
objet (en 1.4 ou version antérieure) ou unjqXHR
objet (1.5+), je préfère encore l'aide d'unsuccess
fonction et unerror
fonction pour plus de clarté. Aussi, les différentes versions de jQuery vous donner des valeurs différentes pourresponseText
sur l'erreur (au moins sur Chrome; 1.4.4 retourne une chaîne vide, 1.5.0 retourneundefined
).Si il y a toute façon, vous pouvez éviter, de les éviter. Les requêtes synchrones complètement de verrouillage de l'INTERFACE utilisateur de la plupart des navigateurs (et pas seulement de votre page de l'INTERFACE utilisateur, à chaque page, dans chaque onglet de navigateur est de la gestion). Depuis requêtes ajax peut prendre une seconde ou deux (ou cinq, ou dix), ce qui en fait une très mauvaise expérience utilisateur. Presque tout le temps, vous pouvez l'éviter par la refactorisation de votre fonction de sorte qu'il accepte un rappel à utiliser pour fournir le résultat:
Hors-sujet: je vais être surpris si la demande fonctionne à tous, bien que, parce que sur le visage de celui-ci (à moins de travailler pour Google), qui demande échoue en raison de la Même La Politique De L'Origine. Différentes façons d'obtenir autour de la SOP:
oups, vous avez raison! Est-ce une question piège? 🙂
Ouais, j'ai remarqué que quand je suis retourné à ajouter les async exemple. J'ai été faire un copier-coller le code d'origine et la suppression de la
async: false
et s'en alla "hé, attendez, c'est une url de google!"Oh, et vous savez quoi, ils ont dit (sur un supprimée réponse) que c'est pour une extension Chrome où x-domaine les demandes sont autorisées.
Merci. J'ai posté la solution en haut de la page. Je vais peut-être modifier cette fonction pour faire un rappel, comme vous l'avez fait. (Notez que Google utilise pour chaque onglet un seul processus, mais je ne sais pas comment il est avec les extensions)
OriginalL'auteur T.J. Crowder
$.ajax
jamais renvoie le texte de la réponse, elle renvoie toujours l'objet XMLHTTPRequest est créé pour faire de l'appel Ajax.Vous aurez toujours besoin de définir un rappel réussi je pense, par exemple, un paramètre une variable locale que vous pouvez ensuite retourner.
Standard avertissement: les requêtes Synchrones sont généralement découragés pratique, car ils peuvent rester sur la page.
Désolé, mais je n'ai pas besoin d'un succès fonction j'ai seulement besoin de return $.ajax(); c'est un objet XMLHTTPRequest comme vous l'avez expliqué. Merci.
OriginalL'auteur Pekka 웃
L'attente de la réponse d'une fonction n'est pas un système, l'appel ajax aura une réponse quand c'est fait, vous devez prendre soin de la réponse, alors, par définition de rappels pour la réussite de l'événement.
Vous avez des ti casser votre code pour au moins deux parties. La première partie est avant l'appel ajax, deuxième partie, après le succès, et de mettre tout ce que vous voulez faire avec les données demandées dans le succès de rappel. Un système de demandes de travail de cette façon.
OriginalL'auteur aorcsik
Faire cela est une très mauvaise idée. Javascript va bloquer pour la durée de la requête HTTP, c'est à dire rien d'autre dans le thread de l'INTERFACE utilisateur sera exécuté jusqu'à l'appel ajax retourne. L'utilisation d'un rappel.
OriginalL'auteur Zachary K
De par leur conception, les requêtes asynchrones ne peut pas livrer un responseText sur le bleu 😉
Vous devez définir une fonction de rappel et de décider comment vous allez gérer les responseText.
OriginalL'auteur Capsule