簡體   English   中英

使用JavaScript調用跨域asmx Web服務

[英]Calling cross domain asmx web service using JavaScript

我已經寫了一個網絡服務。 我正在使用JavaScript調用此Web服務。 我從不同的領域來稱呼它。 為此,我在Web服務中添加了[System.Web.Script.Services.ScriptService]屬性。 從JavaScript,我使用XMLHttpRequest調用服務。 我使用Firefox進行了測試,並且一切正常。 但是它在IE中不起作用。

經過一些搜索,我發現這是與跨域調用有關的問題。 我已經解決了這里發布的一些問題。 然后,我在代碼中做了以下更改-

  1. 從javaScript我現在使用XDomainRequest調用服務。

  2. 我在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提出跨域請求,(不幸的)最好的辦法是使用服務器端代理

查看JSONP(帶填充的json)。

關於JSONP的問題: 帶有jQuery的jsonp

有關它的更多信息: http : //api.jquery.com/jQuery.ajax/

您的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM