2010-05-05 4 views
4

Je travaille sur un projet pour appeler un webservice de domaine différent en utilisant $ .ajax avec dataType défini sur jsonp.jsonp ne tire pas avant Envoi?

$.ajax({ 
     type: "GET", 
     url: testService.asmx, 
     async: true, 
     contentType: "application/json; charset=utf-8", 
     dataType: "jsonp", 

     beforeSend: function (XMLHttpRequest) { 
      alert('Before Send'); //Nothing happnes 
     }, 
     success: function (response) { 
      alert('Success'); //this was fired 
     }, 
     complete: function (XMLHttpRequest, textStatus) { 
      alert('After Send'); //this was fired 
     } 
    }); 

Le problème est que j'ai une animation de chargement ... que je veux afficher pendant le traitement de la demande de service Web. J'ai essayé d'utiliser "beforeSend:" pour montrer l'animation de chargement mais il semble que "beforeSend" ne soit pas viré.

L'animation fonctionne correctement lorsque l'application est sur le même domaine (en utilisant jsonp) mais lorsque je déplace l'application sur un autre serveur, tout fonctionne sauf que "beforeSend" n'est pas appelé. Les utilisateurs ne pourront donc pas voir l'animation de chargement.

Y a-t-il une solution de contournement pour cela?

Répondre

4

Les requêtes JSONP interdomaines n'utilisent pas XMLHTTPRequest, le flux d'événements est donc différent.

Vous pouvez simplement afficher votre animation de chargement juste après avoir appelé $ .ajax.

0

beforeSend L'implémentation de jQuery JSONP est toujours en cours. La solution pour l'instant, utilisez:

jQuery(document).ajaxStart(function(){alert('Before Send');}); // For all XHRs 
$('#id').ajaxStart(function(){alert('Before Send');});   // For unique XHR 

avant $.ajax({...});.