jQuery调用WebService返回"No Transport"错误

gri*_*egs 163 ajax jquery web-services

我有以下网络服务;

    [WebMethod]
    public string HelloWorld()
    {
        return "Hello World";
    }
Run Code Online (Sandbox Code Playgroud)

它是库存标准,没有对类装饰器进行任何改动.

我有这个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);
          }
});
Run Code Online (Sandbox Code Playgroud)

这是一个后期操作,因为稍后我需要将数据发布到它.

当我执行jQuery时,我得到一个"无传输"错误.

我还应该提到的一点是,jQuery存储在我的机器上的一个简单的HTML文件中,而WebService也在我的机器上运行.

HTML页面上没有代码,它只是一个网页,而不是ac #project或任何东西.

任何人都可以指出我在正确的方向吗?

小智 252

添加这个: jQuery.support.cors = true;

它支持jQuery中的跨站点脚本(我相信在1.4x之后引入).

我们使用了一个非常旧版本的jQuery(1.3.2)并将其换成了1.6.1.一切都在工作,除了.ajax()调用.添加以上行修复了问题.

  • 这解决了我的问题,在chrome和firefox工作但不是IE.将此添加到我的脚本的顶部,一切都很好 (14认同)
  • 非常好的修复,当我使用相对路径从同一域请求一个kml文件时,我在Internet Explorer 9上遇到了同样的问题...... IE的奥秘...... (4认同)

no.*_*ing 95

如果你的jQuery页面没有被加载,http://localhost:54473那么这个问题可能是因为你试图提出跨域请求.

更新1 看一下这篇博客文章.

更新2 如果这确实是问题(我怀疑它是),您可能想要检查JSONP作为解决方案.以下是一些可能有助于您入门的链接:

  • @drachenstern嗯,我一直以为(并且似乎记得总是在阅读)方案,主机*和*端口需要相同.[这](http://stackoverflow.com/questions/1077218/are-different-ports-on-the-same-server-considered-cross-domain-ajax-wise)和[this](http:// stackoverflow .com/questions/648048/ajax-cross-domain-calls)和[this](https://secure.wikimedia.org/wikipedia/en/wiki/Same_origin_policy#Origin_determination_rules)似乎支持我的思考方式同一个域名. (7认同)
  • 是的,它可能与安全性有关. (4认同)
  • 它不必是localhost:54473,它只需要是相同的域. (3认同)

bsu*_*tor 26

我在页面上遇到了同样的错误,并添加了这些行:

<!--[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]-->
Run Code Online (Sandbox Code Playgroud)

它最终适用于我;)IE9中没有更多的错误.

  • Github项目:https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest和XDomainRequest信息:http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations- and-workarounds.aspx.基本上,IE8和IE9不支持XMLHttpRequest对象上的CORS.你被迫使用XDomainRequest对象(这是更有限的.可以读取第二个链接上的信息). (6认同)

ryn*_*nop 7

所有提议的答案都不适合我.我的用例略有不同(在IE9中执行ajax获取S3 .json文件).设置jQuery.support.cors = true;摆脱了No Transport错误,但我仍然得到Permission denied错误.

对我有用的是使用jQuery-ajaxTransport-XDomainRequest来强制IE9使用XDomainRequest.使用它不需要设置jQuery.support.cors = true;


Abh*_*hek 6

我通过在dataType ='json'的地方使用dataType ='jsonp'来解决它

  • 仅供参考,由于jsonp不支持POST动词,仅支持GET,因此对于原始发帖人的请求而言,这确实不起作用。 (2认同)