Вызов междоменного .net-метода из jquery в ie / firefox / chrome - PullRequest
4 голосов
/ 03 июля 2011

Я пытался вызвать метод .NET (как файл asmx, так и обычный файл aspx) из другого домена через JQuery, и я просто не могу выполнить работу в каждом браузере. На данный момент он отлично работает в Firefox, но не в IE.

function save() {
    if (jQuery.browser.msie && window.XDomainRequest) {
        // Use XDR
        var params = "{'height':" + 10 + ",'width':" + 10 + ",'pos':'" + 10 + "'}";
        var xdr = new XDomainRequest();
        xdr.onerror = alert_error;
        xdr.ontimeout = alert_timeout;
        xdr.onprogress = alert_progress;
        xdr.onload = alert_loaded;
        xdr.timeout = 10000;
        xdr.open("post", 'http://domain/reciever.asmx/setdata');
        //Tried as webservice and as a normal aspx page
        //xdr.open("post", 'http://domain/default.aspx');
        xdr.send(params);
    }
    else {
        var params = "pos=" + positions + "&width=" + screenWidth + "&height=" + screenHeight;
        var myAjax = new jQuery.ajax(
        "http://domain/default.aspx",
        {
            type: 'post',
            cache: false,

            crossDomain: true,
            data: params
        });
    }
}

На стороне сервера web.config имеет:

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
  </customHeaders>
</httpProtocol>

И веб-сервис

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string setdata(int width, int height, string pos)

Страница aspx возвращает:

Response.Clear();
Response.ContentType = "text/plain";
Response.AddHeader("Access-Control-Allow-Origin", "*");
Response.End();

Фидлер говорит: Fiddler обнаружил нарушение протокола в сеансе # 2565. Несоответствие длины содержимого: заголовок запроса указал 38 байтов, но клиент отправил 0 байтов. Так что я бы поверил, что это «Access-Control-Allow-Origin», но это я установил (насколько мне известно).

Может кто-нибудь помочь мне понять, что я делаю неправильно.

1 Ответ

1 голос
/ 03 июля 2011

Некоторые браузеры не разрешают междоменные вызовы Ajax ( вызов с использованием объекта XmlHttpRequest ) по некоторым причинам безопасности.

Но решение вместо ajax звонки используют JSONP звонки.JSONP избегает этого, делая запрос, подходящий для файла сценария.Используя JSONP, следующие вещи делают возможным междоменный запрос:

1. Вместо доступа к объекту XHR , браузер сначала создает новый скрипт-тег для внедрения вHTML DOM .

2. URL тега сценария устанавливается на URL, который вы ищете , чтобы получить / опубликовать (используя HTTP GET) данные.

3. Тег скрипта внедряется в страницу, вызывая ...

4. Запрос отправляется на сервер, даже если он междоменный

5.The сервер возвращает данные в виде вызова функции JavaScript

6. Браузер получает данные и выполняет вызов функции

См. приведенные ниже URL-адреса, чтобы получить подробную информацию о реализации,

http://www.codeproject.com/Articles/78757/Making-Cross-Domain-jQuery-AJAX-Calls.aspx

http://usejquery.com/posts/9/the-jquery-cross-domain-ajax-guide

Надеюсь, это определенно поможет вам ...

...