Pourquoi jQuery n’ajoute-t-il pas automatiquement le rappel JSONP?

La documentation $.getJSON() indique:

Si l’URL spécifiée se trouve sur un serveur distant, la demande est traitée à la place comme JSONP. Voir la discussion sur le type de données jsonp dans $ .ajax () pour plus de détails.

La documentation $.ajax() pour le type de données jsonp déclare (emphase mine):

Charge dans un bloc JSON à l’aide de JSONP. Ajoutera un extra “? Callback =?” à la fin de votre URL pour spécifier le rappel .

Il semble donc que si j’appelle $.getJSON() avec une URL inter-domaines, le supplément “callback =?” paramètre devrait automatiquement être ajouté. (D’autres parties de la documentation supportent cette interprétation.)

Cependant, je ne vois pas ce comportement. Si je n’ajoute pas le “callback =?” explicitement, jQuery crée de manière incorrecte un XMLHttpRequest (qui renvoie des données nulles car je ne peux pas lire la réponse entre plusieurs domaines). Si je l’ajoute explicitement, jQuery effectue correctement une demande .

Voici un exemple:

 var URL = "http://www.geonames.org/postalCodeLookupJSON" + "?postalcode=10504&country=US"; function alertResponse(data, status) { alert("data: " + data + ", status: " + status); } $.getJSON(URL, alertResponse); // alerts "data: null, status: success" $.getJSON(URL + "&callback=?", alertResponse); // alerts "data: [object Object], status: undefined" 

Alors que se passe-t-il? Est-ce que je comprends mal la documentation ou oublie quelque chose?

Il va sans dire que ce n’est pas un gros problème, mais je crée une API Web et j’ai volontairement mis le paramètre callback sur “callback” dans l’espoir de l’adapter parfaitement à l’utilisation de jQuery.

Merci!

(Edit: je l’ai post-posté dans les forums jQuery si cela vous intéresse.)

Essaye ça:

 var URL = "http://www.geonames.org/postalCodeLookupJSON" + "?postalcode=10504&country=US"; function alertResponse(data, status) { alert("data: " + data + ", status: " + status); } $.ajax({ url: URL, dataType: 'jsonp', jsonpCallback: 'alertResponse', }); 

Il s’est avéré qu’il s’agissait d’un bogue dans la documentation de jQuery. Voir http://forum.jquery.com/topic/getjson-isn-t-automatically-appending-callback-to-my-cross-domain-url pour plus de détails.

Oui, je pense que vous avez mal compris. $.getJSON est un raccourci pour $.ajax({datatype: 'json'.... comme le dit la documentation. Il ne fait jamais d’appel JSONP à moins que vous ajoutiez le paramètre callback=?

J’utilise le code ci-dessous,

$ .ajax ({url: URL, dataType: ‘jsonp’, succès: function (data) {// faire quelque chose} erreur: function (jqXHR, textStatus, errorThrown) {}, jsonpCallback: ‘login_callback’,});

Mais, le rappel est parfois ajouté à la fin de l’URL et parfois pas dans IE. Alors que son fonctionne bien en chrome et FF.