2009-04-08 8 views
2

J'avais une question précédente can jquery ajax call external webservice?Comment appeler un service web externe en utilisant jquery "jsonp"?


et quelques bons développeurs m'a répondu d'utiliser jsonp, mais je ne sais pas comment l'utiliser, je suis en train d'appeler mon service à l'aide de ce code:

$.ajax({ 
      type: "POST", 
      url: "http://localhost:1096/MySite/WebService.asmx?callback=?", 
      data: "{}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "jsonp", 
      success: function(msg) {alert(msg);} 
      }); 


et voici mon code de service:

[WebMethod] 
public string HelloWorld() { 
    return "Hello World " ; 
} 


Quelqu'un at-il des exemples ou peut expliquer ce problème pour moi?

MISE À JOUR:
je l'ai écrit à nouveau le code pour ressembler à ceci:

$.getJSON("http://localhost:1096/YourShoppingTest1/WebService.asmx/HelloWorld?jsonp=?",{name:"test"}, 
    function(data){ 
    alert(data.x); 
    }); 


et le service comme celui-ci:

[WebMethod] 
public string HelloWorld(string name) 
{ 
    return "({\"x\":10 , \"y\":100})"; 
} 


Mais donne moi toujours cette erreur quand retour: "manquant; avant la déclaration [Pause sur cette erreur] ({ "x": 10, "y": 100}) »

et ne jamais appeler la fonction de succès, quelqu'un peut-il aider à ce

+0

Pourquoi avez-vous accepté la réponse à votre autre question si elle ne vous a pas aidé? Vous devriez continuer à demander dans votre ancienne question et suivre ce fil. – Seb

+0

parce qu'ils m'ont répondu de cette façon: $ .getJSON qui fonctionne, mais je demande d'une autre façon d'utiliser $ .ajax –

Répondre

0

Vous ne pouvez pas émettre une requête POST en utilisant JSONP, GET seulement (parce que la ressource <script src="..."> GETs).

-1

D'abord, vous devez ajouter jsonp ('rappel') dans votre serveur web comme $ _GET [ 'rappel']

Deuxièmement, ne pas oublier le ';' après les scripts de sortie

$data = '{"name" : "hello world"}'; 
echo $_GET['jsoncallback'] . '(' . $data . ');'; 

Vous pouvez maintenant savoir pourquoi le problème "missing: before statement" s'est produit.

html:

$.getJSON({"http://localhost:1096/MySite/WebService.asmx?callback=?", 
     function(data){alert(data);} 
     }); 
0

Code de Hezil a fonctionné pour moi, mais je devais changer le code du serveur à ceci:

$data = '{"name" : "hello world"}'; echo $_GET['callback'] . '(' . $data . ');'; 

Notez le "rappel" au lieu de "jsoncallback".

2

Le point avec JSONP est le P! P comme dans le remplissage. Vous remplissez le littéral d'objet JSON avec un appel de fonction - invoquant une fonction sur la page appelante prenant l'objet de données en tant qu'argument.

I.e. si vous demandez le webservice, envoyez le nom de la fonction de rappel souhaitée dans la chaîne de requête

...service/?callback=hello 

Ensuite, le service doit répondre (en utilisant le type MIME approprié):

hello({a: 17, b: 4117}); 

Pour une explication plus approfondie, voir: http://www.stpe.se/2008/10/cross-site-data-retrieval-using-jsonp/

Questions connexes