Я пытался вызвать метод .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», но это я установил (насколько мне известно).
Может кто-нибудь помочь мне понять, что я делаю неправильно.