我已经托管了一个网络服务
http://example1.com/webservice.asmx
并希望从
致电 http://example2.com
我有像example2.com中的jQuery代码
GetData: function () {
$.ajax({
crossDomain: true,
type: "POST",
url: "http://example1.com/webservice.asmx/GetData",
dataType: "jsonp",
contentType: "application/json; charset=utf-8",
data: { Date: '' },
success: function (data, textStatus, jqXHR) {
debugger;
},
error: function (data, textStatus, jqXHR) {
alert("data");
}
});
}
它像网址一样点击
http://example1.com/webservice.asmx/GetData?callback=jQuery19106349606812515739_1396429620115&Date=&_=1396429620116
并使用GET方法(来自firebug)点击该网址。实际上哪里有问题我无法找到它。 它以XML格式响应数据。 并且还以XML格式响应数据但未获得成功事件。 但如果我在同一个域上放置相同的代码,它的工作正常。
答案 0 :(得分:0)
对于JSONP,您的响应必须包含在Javascript函数中。如果设置dataType: "jsonp"
,Jquery会自动将回调参数添加到GET-URL。此回调参数是一个随机的js函数名称,您的ajax请求需要恢复数据交叉原点。
要使其工作,您需要更改Webservice,如下所示:
答案 1 :(得分:0)
这个修复程序适用于JQuery的纯json调用。 从system.web
中的web.config启用HttpGet和Post<webServices>
<protocols>
<add name="HttpSoap"/>
<add name="HttpPost"/>
<add name="HttpGet"/>
<add name="HttpPostLocalhost"/>
</protocols>
</webServices>
然后,在Global.asax文件中创建一个方法以启用跨域通信(vb.net) &#39; ========================== EnableCrossDmainAjaxCall =================
Private Sub EnableCrossDmainAjaxCall()
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*")
If HttpContext.Current.Request.HttpMethod = "OPTIONS" Then
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE, OPTIONS")
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept")
HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000")
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "origin, x-requested-with, content-type")
HttpContext.Current.Response.[End]()
End If
End Sub
Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache)
HttpContext.Current.Response.Cache.SetNoStore()
EnableCrossDmainAjaxCall()
End Sub
'==========================