2010-09-09 5 views
0

J'utilise le protocole jsonp pour appeler des méthodes Web.Impossible d'appeler webmethod avec jquery json

J'utilise ce code pour le webservice:

public class Service1 : System.Web.Services.WebService 
{ 
    [WebMethod] 
    [ScriptMethod] 
    public string HelloWorld() 
    { 
     return "Hello World"; 
    } 
} 

Et ceci sur Jquery avec jason côté client:

 $.ajax({ 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      url: 'http://localhost:50837/Service1.asmx/HelloWorld', 
      data: {}, 
      dataType: "json", 

      success: function(Msg) { 
       alert('success:' + Msg.d.FirstName); 

      }, 
      error: function(xhr, textStatus, errorThrown) { 
       alert("error"); 
      } 

     }); 

    } 

Cette Jquery me donne toujours un message d'erreur, mais je ne connais la raison. Quelqu'un peut m'aider?

+2

Modifier 'alert (" erreur ")' à 'alert (textStatus +" - "+ errorThrown)' pour les débutants :) –

+0

Et l'erreur est quoi? – epitka

+0

Pourquoi utilisez-vous l'URL comme 'http: // localhost: 50837/Service1.asmx/HelloWorld' et non comme '/Service1.asmx/HelloWorld'? Si le service Web sur l'autre site Web et votre programme JavaScript? Où vous utilisez jsonp dans votre code actuel? – Oleg

Répondre

2

Vous devez placer le service Web comme une partie sur le site. Si vous ne le faites pas votre code ne fonctionnera pas à cause de Same Origin Policy problem (voir).

Vous pouvez placer sur le même site de nombreuses applications développées avec des techniques différentes comme ASP.NET MVC, Service Web ASMX et service WCF et tout peut très bien fonctionner ensemble. C'est la seule façon de pouvoir utiliser sans complexe JSONP. Dans votre situation, JSONP est surdimensionné.

Votre question est presque la même que Calling simple web service (.asmx file) from AJAX and JQuery using JSON - parse error. Si vous avez besoin d'un exemple de travail Hello Wold, vous trouverez une url dans l'exemple de code complet.

Vous pouvez en savoir plus sur les différentes façons de résoudre la politique de même origine sous Question about making XHR requests. Après avoir lu cela, vous comprendrez que le problème de la politique de la même origine est vraiment complexe. Vous pouvez le résoudre, mais dans votre cas, vous n'avez pas vraiment besoin de tout placer sur le même site Web et d'utiliser des chemins relatifs.

+0

ok, vous avez raison. Pour résoudre mon problème, j'appelle une fonction du côté serveur et appelle le WS. Merci pour l'aide. –

Questions connexes