从jQuery调用asmx web服务

时间:2010-10-01 13:50:30

标签: asp.net jquery asmx

我无法从jQuery函数调用Web服务(asmx)。

调用Web服务时说“访问被拒绝”错误。它在开发和本地机器上工作,但我得到了同样的错误。

这是我的ajax电话

$.ajax({
            type: "POST",
            url: "http://server.com/calculator.asmx/calculus",
            data: "{ 'userID': '" + $("#usrid").val() + "','password': '" + $("#password").val() + "' }",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: Success,
            error: Error
        });

我的网络服务

[WebService(Namespace = "http://www.company.com/webservices/calculus")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]

public class calculator : System.Web.Services.WebService
{

    [WebMethod]
    [System.Web.Script.Services.ScriptMethod(UseHttpGet=false, ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)]
   public bool calculus(string userName, string password)
    {// my code}

错误在http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js函数中 e.username上的“拒绝访问”错误?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async); < / p>

我已将[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]包含在http://forums.asp.net/p/1570168/3935094.aspx所示的类中,但无法解决问题。任何人都可以帮我解决这个问题。

谢谢

2 个答案:

答案 0 :(得分:2)

AJAX调用绑定到same origin policy,这意味着您无法调用位于不同域的Web服务。浏览器只会删除请求。一种可能的解决方案是在同一个域上编写服务器端脚本,该脚本将作为实际Web服务的桥梁,然后调用此脚本。

答案 1 :(得分:0)

JSONP是解决“同源策略”(又称跨站点脚本或XSS)限制的可能方法。它带有一系列挑战(例如,它只适用于GET模式请求),所以它肯定不是灵丹妙药。但是值得花时间去看看它。有大量关于它的stackoverflow帖子,这应该可以帮助你开始。