[英]Calling cross domain asmx web service using JavaScript
我已經寫了一個網絡服務。 我正在使用JavaScript調用此Web服務。 我從不同的領域來稱呼它。 為此,我在Web服務中添加了[System.Web.Script.Services.ScriptService]
屬性。 從JavaScript,我使用XMLHttpRequest調用服務。 我使用Firefox進行了測試,並且一切正常。 但是它在IE中不起作用。
經過一些搜索,我發現這是與跨域調用有關的問題。 我已經解決了這里發布的一些問題。 然后,我在代碼中做了以下更改-
從javaScript我現在使用XDomainRequest調用服務。
我在Web服務中的return語句之前添加了以下幾行HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Origin", "*"); HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Credentials", "true"); return result;
HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Origin", "*"); HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Credentials", "true"); return result;
在Firefox中它仍然可以正常工作。 但是在IE8中(據我所知,XDomainRequest在較低版本的IE中將不起作用),它顯示錯誤( XDomainRequest.onerror )。
我想念什么嗎?
IE中問題的症結在於XDomainRequest不支持發出包含Content-Type標頭的跨域請求所必需的預檢。 我相信IE10中已解決此問題,但即使IE9也不完全支持CORS 。
為了在不很好支持CORS的瀏覽器中可靠地向ScriptServices提出跨域請求,(不幸的)最好的辦法是使用服務器端代理 。
您的Web服務通過HTTP運行嗎?
我不建議使用本機XMLHttpRequest來發出ajax請求,也許您應該使用Jquery來做到這一點,我總是這樣做,並且可以在所有現代瀏覽器中使用:
即:
function Activate(EmailId, controle) {
$.ajax({
type: "POST",
url: "/Page/Method",
data: "&EmailId=" + EmailId,
success: function (message) {
$(controle).text(message);
}
});
}
編輯:要發出跨域請求,您可以使用James Padolsey插件,並執行以下操作:
$('#container').load('http://google.com');
$.ajax({
url: 'http://news.bbc.co.uk',
type: 'GET',
success: function(res) {
var headline = $(res.responseText).find('a.tsh').text();
alert(headline);
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.