jQuery调用WebService返回“无传输”错误
我有以下的networking服务;
[WebMethod] public string HelloWorld() { return "Hello World"; }
这是股票的标准,没有改变类装饰。
我有这个jQuery方法;
var webMethod = "http://localhost:54473/Service1.asmx/HelloWorld"; $.ajax({ type: "POST", contentType: "application/json; charset=utf-8", data: "{}", dataType: "json", url: webMethod, success: function(msg){ alert(msg.d); }, error: function (XMLHttpRequest, textStatus, errorThrown) { alert(errorThrown); } });
这是一个后期行动,因为以后我需要发布数据。
当我执行jQuery时,我得到一个“无运输”错误返回。
还有一点我应该提到的是,jQuery存储在我的机器上的一个简单的HTML文件中,WebService也在我的机器上运行。
在HTML页面上没有任何代码,它只是一个网页,而不是ac#项目或任何东西。
任何人都可以在这里指出正确的方向吗?
如果你的jQuery页面没有从http://localhost:54473
加载,那么这个问题可能是因为你试图做跨域请求。
更新1看看这个博客文章 。
更新2如果这确实是问题(我怀疑是这样),那么您可能需要查看JSONP作为解决scheme。 以下是可帮助您开始使用的几个链接:
添加这个: jQuery.support.cors = true;
它支持jQuery中的跨站点脚本(在1.4x之后引入,我相信)。
我们使用的是一个非常老版本的jQuery(1.3.2),并将其replace为1.6.1。 除了.ajax()调用,一切正常。 添加上面的行解决了这个问题。
我在页面上有同样的错误,我添加了这些行:
<!--[if lte IE 9]> <script type='text/javascript' src='//cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.3/jquery.xdomainrequest.min.js'></script> <![endif]-->
它终于为我工作;)在IE9没有更多的错误。
没有任何build议的答案完全为我工作。 我的用例略有不同(做一个AJAX到IE9中的S3 .json文件)。 设置jQuery.support.cors = true;
摆脱了No Transport
错误,但我仍然获得Permission denied
错误。
什么工作对我来说是使用jQuery-ajaxTransport-XDomainRequest强制IE9使用XDomainRequest。 使用这个不需要设置jQuery.support.cors = true;
我通过在dataType ='json'处使用dataType ='jsonp'来解决这个问题。
我也得到了这个问题,上面给出的所有解决scheme由于客户端web服务的限制而失败或不适用。
为此,我在我的页面中添加了一个驻留在客户端服务器中的iframe。 所以当我们将数据发布到iframe和iframe然后将其发布到web服务。 因此,跨域参考被消除。
我们添加了一个双向来源检查,以确认只有经过授权的页面发布数据往返于iframe。
希望它有帮助
<iframe style="display:none;" id='receiver' name="receiver" src="https://iframe-address-at-client-server"> </iframe> //send data to iframe var hiddenFrame = document.getElementById('receiver').contentWindow; hiddenFrame.postMessage(JSON.stringify(message), 'https://client-server-url'); //The iframe receives the data using the code: window.onload = function () { var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent"; var eventer = window[eventMethod]; var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message"; eventer(messageEvent, function (e) { var origin = e.origin; //if origin not in pre-defined list, break and return var messageFromParent = JSON.parse(e.data); var json = messageFromParent.data; //send json to web service using AJAX //return the response back to source e.source.postMessage(JSON.stringify(aJAXResponse), e.origin); }, false); }
我简单地通过从请求url中删除域来解决它。
Before: https://some.domain.com/_vti_bin/service.svc After: /_vti_bin/service.svc