jQuery: Comment activer `beforeSend` pour` $ .ajax ({dataType: ‘jsonp’… `?)

jQuery: Comment activer beforeSend pour $.ajax({dataType:'jsonp'... ? Y a-t-il une solution? http://jsfiddle.net/laukstein/2wcpU/

 
$.ajax({ type:"GET", url:'http://lab.laukstein.com/ajax-seo/.json', dataType:'jsonp', async:false, beforeSend:function(data){ // Are not working with dataType:'jsonp' $('#content').html('Loading...'); }, success:function(data){ $('#content').html(data.content); } });

C’est la nature même du fonctionnement de JSONP: créer une et ne pas utiliser réellement XMLHttpRequest pour obtenir des données. Pour ce que vous faites, vous pouvez simplement exécuter le code avant, comme ceci:

 $('#content').html('Loading...'); $.ajax({ type:"GET", url:'http://lab.laukstein.com/ajax-seo/.json', dataType:'jsonp', async:false, success:function(data){ $('#content').html(data.content); } }); 

Selon la documentation jQuery

Lorsque les données sont extraites de serveurs distants (ce qui n’est possible qu’avec les types de données script ou jsonp), l’opération est effectuée à l’aide d’une balise plutôt que d’un object XMLHttpRequest. Dans ce cas, aucun object XMLHttpRequest n’est renvoyé à partir de $ .ajax (), et l’object XMLHttpRequest et les arguments textStatus transmis aux fonctions de gestionnaire telles que beforeSend seront non définis. Le rappel d’erreur ne sera jamais déclenché pour les demandes JSONP.

La même question est posée sur les forums jQuery ajax:beforeSend for jsonp requests don't fire

Le statut de la question est Status : Working on it . Donc, il pourrait être là lors d’une prochaine version.

Et comme Mike Alsups a noté

Je nommerais que fonctionner autre chose que ‘beforeSend’ puisque la sémantique n’est pas la même.

Également lié: jsonp is not firing beforeSend?


Ne peut pas utiliser beforeSend avec jsonp. Période.

vous pouvez utiliser ce code:

befor $ .ajax le dit, et vous devriez avoir une image (ou div, span, …) chargée avec l’id “div_loading”.

 $("#div_loading").ajaxStart(function(){$(this).show();}); $("#div_loading").ajaxStop(function(){$(this).hide();});