Fonction de rappel pour JSONP avec JQuery ajax

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 });