对Web服务的jQuery调用返回“无传输”错误

hts6caw3  于 2022-11-03  发布在  jQuery
关注(0)|答案(8)|浏览(140)

我有以下Web服务;

[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时,我得到一个“No transport”错误返回。
我还应该提到的一件事是,jQuery存储在我的机器上的一个简单HTML文件中,WebService也在我的机器上运行。
HTML页面上没有代码,它只是一个网页,而不是一个c#项目或任何东西。
有谁能给我指个方向吗?

hmtdttj4

hmtdttj41#

添加此内容:jQuery.support.cors = true;
它支持jQuery中的跨站点脚本编写(我相信是在1.4x之后引入的)。
我们使用的是一个非常旧的jQuery版本(1.3.2),并将其替换为1.6.1。除了. AJAX ()调用之外,一切都正常。添加上面的行修复了这个问题。

h5qlskok

h5qlskok2#

如果您的jQuery页面不是从http://localhost:54473加载的,那么这个问题可能是因为您尝试进行跨域请求。

更新1请看一下this blog post
Update 2如果这确实是问题所在(我怀疑确实如此),您可能需要查看JSONP作为解决方案。下面的一些链接可能会帮助您入门:

8dtrkrch

8dtrkrch3#

我在一个页面上遇到了同样的错误,我添加了以下几行:

<!--[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中不再出现错误。

vulvrdjw

vulvrdjw4#

我的用例稍有不同(在IE9中使用 AJAX 获取S3.json文件),设置jQuery.support.cors = true;消除了No Transport错误,但我仍然得到Permission denied错误。
对我有效的方法是使用jQuery-ajaxTransport-XDomainRequest强制IE9使用XDomainRequest。

nnvyjq4y

nnvyjq4y5#

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

flmtquvp

flmtquvp6#

我也遇到了这个问题,上面给出的所有解决方案要么失败,要么由于客户端Web服务的限制而不适用。
为此,我在驻留在客户机中的页面中添加了一个iframe;因此,当我们将数据发布到iframe时,iframe会将其发布到Web服务,因此,跨域引用被消除。
我们添加了双向来源检查,以确认只有授权的页面发布数据到iframe和来自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);
}
7tofc5zh

7tofc5zh7#

对我来说,这是一个完全不同的故事。
由于这个页面有一个很好的搜索引擎排名,我应该添加我的情况下,并在这里的解决方案了。
我自己构建了jQuery,webpack只挑选我使用的模块。 AJAX 总是失败,“没有传输”消息是唯一的线索。
经过长时间的调试,问题是XMLHttpRequest在jQuery中是可插入的,并且默认情况下不包含它。
你必须显式地包含jquery/src/ajax/xhr文件,以使 AJAX 在浏览器中工作。

rfbsl7qr

rfbsl7qr8#

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

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

After: /_vti_bin/service.svc

相关问题