我一直试图通过
JQuery从另一个域调用.NET方法(asmx文件和普通的aspx文件),我无法在每个浏览器中完成工作.目前它在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>
和webservice
[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”,但我已经设置了(据我所知).
有人可以帮我理解我做错了什么.
解决方法
出于某些安全原因,某些浏览器不允许跨域Ajax调用(使用XmlHttpRequest对象进行调用).
但解决方案是使用JSONP调用而不是ajax调用. JSONP通过发出适合脚本文件的请求来避免这种情况.通过使用JSONP,以下事情可以使跨域请求成为可能,
1.浏览器首先创建一个新的脚本标记以注入HTML DOM,而不是访问XHR对象.
2.脚本标记的URL设置为您希望获取/发布(使用HTTP GET)数据的URL.
4.请求被发送到服务器,即使它是跨域的
请参阅下面的网址以获取实施细节,
http://www.codeproject.com/Articles/78757/Making-Cross-Domain-jQuery-AJAX-Calls.aspx
http://usejquery.com/posts/9/the-jquery-cross-domain-ajax-guide
希望这绝对可以帮助你……
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。