对 WebService 的 jQuery 调用返回“ No Transport”错误

我有以下网上服务;

    [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);
}
});

这是一个 post 操作,因为稍后我需要向它发布数据。

当我执行 jQuery 时,我得到一个“ No Transport”错误返回。

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

HTML 页面背后没有代码,它只是一个网页,而不是一个 c # 项目或任何东西。

有人能告诉我正确的方向吗?

169543 次浏览

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

看看 这篇博文

如果这确实是问题所在(我怀疑也是) ,那么您可能需要检查 JSONP 作为解决方案。这里有一些可以帮助你开始的链接:

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

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

我们使用了一个非常老版本的 jQuery (1.3.2) ,并将其替换为1.6.1。一切正常,除了。Ajax ()调用。添加上述行修复了问题。

我通过使用 dataType = ‘ jsonp’来解决这个问题 在 dataType = ‘ json’的位置

所有提出的答案对我来说都没有完全奏效。我的用例略有不同(使用 ajax 到 S3)。Json 文件)。设置 jQuery.support.cors = true;摆脱了 No Transport错误,但我仍然得到 Permission denied错误。

对我来说,真正起作用的是使用 JQuery-ajaxTransport-XDomainRequest强制 IE9使用 XDomainRequest。使用此方法不需要设置 jQuery.support.cors = true;

我在一个页面上出现了同样的错误,我添加了这些行:

<!--[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没有更多的错误。

我通过从请求 URL 中删除域解决了这个问题。

Before: https://some.domain.com/_vti_bin/service.svc


After: /_vti_bin/service.svc

我也得到了这个问题和所有的解决方案给予或失败或不适用,由于客户端网络服务的限制。

为此,我在页面中添加了一个 iframe,该 iframe 位于客户机服务器中。因此,当我们将数据发布到 iframe 时,iframe 会将数据发布到 webservice。因此消除了跨域引用。

我们添加了一个双向原点检查,以确认只有经过授权的页面发布数据进出 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);
}

对我来说,这是一个完全不同的故事。
由于这个网页有一个很好的搜索引擎排名,我应该添加我的情况和解决方案在这里太。

我自己构建了 jQuery,webpack 只挑选我使用的模块。Ajax 总是以“ No Transport”消息作为唯一线索而失败。

经过长时间的调试,问题是 XMLHttpRequest在 jQuery 中是可插拔的,而且默认情况下没有包含它。

为了让 ajax 在浏览器中工作,必须显式地包含 jquery/src/ajax/xhr文件。