Je ne comprenais pas très bien comment travailler avec le rappel pour la fonction ajax de JQuery.
J'ai le code suivant dans le JavaScript:
try { $.ajax({ url: 'http://url.of.my.server/submit?callback=?', cache: false, type: 'POST', data: $("#survey").serialize(), dataType: "jsonp", timeout: 200, crossDomain: true, jsonp: 'jsonp_callback', success: function (data, status) { mySurvey.closePopup(); }, error: function (xOptions, textStatus) { mySurvey.closePopup(); } }); } catch (err) { mySurvey.closePopup(); }
Et du côté du serveur (AppEngine / Python), j'obtiens la valeur du paramètre de rappel et réponds avec
self.response.headers['Content-Type'] = 'application/json; charset=utf-8' self.response.out.write(callback + '({"msg": "ok"});')
Mais alors, je reçois une "Error: jQuery152042227689944248825_1317400799214 is not a function"
sur le navigateur.
Quel est le bon moyen de gérer cela? À l'heure actuelle, j'obtiens les résultats dont j'ai besoin, mais le fait que je sache que ce n'est pas juste me dérange.
C'est ce que je fais sur le mien
$(document).ready(function () { if ($('#userForm').valid()) { var formData = $("#userForm").serializeArray(); $.ajax({ url: 'http://www.example.com/user/' + $('#Id').val() + '?callback=?', type: "GET", data: formData, dataType: "jsonp", jsonpCallback: "localJsonpCallback" }); }); function localJsonpCallback(json) { if (!json.Error) { $('#resultForm').submit(); } else { $('#loading').hide(); $('#userForm').show(); alert(json.Message); } }
Supprimez cette ligne:
jsonp: 'jsonp_callback',
Ou remplacez cette ligne:
url: 'http://url.of.my.server/submit?callback=json_callback',
Car actuellement vous demandez jQuery de créer un nom de fonction de rappel aléatoire avec callback=?
Et ensuite dire à jQuery que vous souhaitez utiliser jsonp_callback
place.
$.ajax({ url: 'http://url.of.my.server/submit', dataType: "jsonp", jsonp: 'callback', jsonpCallback: 'jsonp_callback' });
Jsonp est le nom du paramètre querystring qui est défini comme acceptable par le serveur tandis que jsonpCallback est le nom de la fonction javascript à exécuter sur le client.
Lorsque vous utilisez cette url:
url: 'http://url.of.my.server/submit?callback=?'
Le point d'interrogation? À la fin, il demande à jQuery de générer une fonction aléatoire tandis que le comportement prédeterminé de la fonction autogénérée invoquera simplement le rappel – la fonction de réussite dans ce cas – en passant les données json en tant que paramètre.
$.ajax({ url: 'http://url.of.my.server/submit?callback=?', success: function (data, status) { mySurvey.closePopup(); }, error: function (xOptions, textStatus) { mySurvey.closePopup(); } });
Il en va de même si vous utilisez $ .getJSON avec? L'espace réservé générera une fonction aléatoire tandis que le comportement prédeterminé de la fonction autogénérée invoquera simplement le rappel:
$.getJSON('http://url.of.my.server/submit?callback=?',function(data){ //process data here });