我无法从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所示的类中,但无法解决问题。任何人都可以帮我解决这个问题。
谢谢
答案 0 :(得分:2)
AJAX调用绑定到same origin policy,这意味着您无法调用位于不同域的Web服务。浏览器只会删除请求。一种可能的解决方案是在同一个域上编写服务器端脚本,该脚本将作为实际Web服务的桥梁,然后调用此脚本。
答案 1 :(得分:0)
JSONP是解决“同源策略”(又称跨站点脚本或XSS)限制的可能方法。它带有一系列挑战(例如,它只适用于GET模式请求),所以它肯定不是灵丹妙药。但是值得花时间去看看它。有大量关于它的stackoverflow帖子,这应该可以帮助你开始。