2010-09-09 46 views
0

我使用协议jsonp来调用web方法。无法使用jquery json调用webmethod

我使用此代码为WebService:

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

这jQuery的与Jason在客户端:

 $.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"); 
      } 

     }); 

    } 

这个jQuery让我总是一个错误信息,但我不知道原因。 有人可以帮助我吗?

+2

对于初学者,将'alert(“error”)''改为'alert(textStatus +“ - ”+ errorThrown):) – 2010-09-09 19:31:51

+0

错误是什么? – epitka 2010-09-09 19:32:22

+0

为什么使用像'http:// localhost:50837/Service1.asmx/HelloWorld'这样的URL而不是'/Service1.asmx/HelloWorld'?如果其他网站上的Web服务和JavaScript程序?你在当前代码中使用jsonp的地方? – Oleg 2010-09-09 19:32:31

回答

2

应该将Web服务作为网站的一部分。如果您不这样做,您的代码将无法工作,因为Same Origin Policy problem(请参阅参考资料)。

你可以在同一个网站上放置很多用ASP.NET MVC,ASMX Web Service和WCF服务等不同技术开发的应用程序,它们都可以很好地协同工作。这是没有更复杂的JSONP的唯一方法。在你的情况下,JSONP是超大的。你的问题与Calling simple web service (.asmx file) from AJAX and JQuery using JSON - parse error差不多。如果你需要一个正常工作的Hello Wold例子,你可以在完整的代码示例中找到一个url。

您可以在Question about making XHR requests下阅读更多关于解决同源策略的不同方法。读完之后你会明白同源政策问题确实很复杂。你可以解决它,但在你的情况下,你并不需要把所有的东西放在同一个网站上,并使用相对路径。

+0

好的,你说得对。为了解决我的问题,我在服务器端调用一个函数并调用WS。感谢帮助。 – 2010-09-10 14:09:49