【问题标题】:Ajax GET request to a WebAPI hosted on a separate server, getting error对托管在单独服务器上的 WebAPI 的 Ajax GET 请求,出现错误
【发布时间】:2013-12-26 14:58:01
【问题描述】:

这是我第一次处理来自客户端代码的 Ajax 请求,所以我希望有一些我在我的代码中没有看到的明显错误。让我先说当我手动导航到下面列出的 URL 时,我得到一个 JSON 响应。所以,网址很好。但是,当我发出 Ajax GET 请求时,我得到了错误:

这是我的客户端代码:

    $.ajax({
        url: 'http://localhost/TestApp.WebAPI/api/BulletinBoard/APPNAME',
        type: 'GET',
        dataType: 'json',
        crossDomain: true,
        success: function (data) {
            WriteResponse(data);
        },
        error: function (x, y, z) {
            alert(x + '\n' + y + '\n' + z);
        }
    });

所以,代码遇到了错误,但我不知道为什么。我不是 JavaScript 专家,所以我不确定是否可以做任何事情来获得更详细的错误版本,但我希望我缺少一些明显的东西。

【问题讨论】:

    标签: javascript jquery ajax asp.net-web-api


    【解决方案1】:

    更多阅读:jQuery AJAX cross domain

    我知道我正在开发一个项目,其中 api 在一个单独的 Web 服务上,但是,在本地开发.. 两个站点都在 iis 下作为一个单独的应用程序工作,因为 URL 类似于以下内容: http://localhost/mysite/http://localhost/mysiteAPI/ 也许你的初始项目是这样设置的? 我记得添加了上面文章中提到的接受信息。我还记得附加了“&callback=?”到我的一些调用的 url 来模拟 jsonp 而不必指定类型。

    【讨论】:

      【解决方案2】:

      Ajax 并不总是有帮助。在 IE 7,8 上,您仍然无法使用该技术进行 CORS。可以使用 ajax 进行跨域请求,但在某些情况下,例如我所说的(IE 7,8),您需要进行“破解”才能将响应“注入”到请求页面中。该技术有时被称为 JSONP(或 JSON 填充)。在 Chrome 和 Firefox 上,即使没有设置为 true,您也可以执行 CORS,前提是响应服务允许跨域调用,在 IE 10(我相信)和 11 上也是可能的。

      【讨论】:

        【解决方案3】:

        如果您使用的是 WebAPI 2,您只需通过 Nuget 添加对System.Web.Http.Cors 的引用(在 Nuget 中搜索 Microsoft.AspNet.WebApi.Cors)。然后,在您的控制器中,添加:

        using System.Web.Http.Cors;

        还有:

        [EnableCors("*", "*", "*")] 上面是您从另一个域调用的方法。

        最后,添加:

        using System.Web.Http.Cors; 到您的 WebApiConfig.cs,以及:

        config.EnableCors(); 在 WebApiConfig.cs 的 Register 方法中。

        这将允许您在不使用 JSONP 的情况下从 Ajax 进行跨域调用。

        【讨论】:

        • 无论谁对此投了反对票,当您不发表评论解释原因时,这非常令人沮丧。这是我的问题的解决方案。
        【解决方案4】:

        您正在执行使用普通AJAX 请求无法实现的跨域请求,您必须使用JSONP 请求。我不久前为另一个人回答了这个问题,请看这里:JQuery JSON Calls To PHP WebService Always Runs "Error" Callback

        【讨论】:

        • 好吧,如果我将jQuery.support.cors = true; 放在我的 JavaScript 中,我以前可以获取我的数据,但现在,无论我是否有这个,它都不再工作了.
        • 当我输入上述行时,它曾经返回成功。
        • 如果它是跨域的,并且从服务器返回的结果不是 jsonp,那么我怀疑它是否真的有效....相信我,如果没有 jsonp,你不能使用 ajax 进行跨域。
        • 是的,我的 WebAPI 返回纯 JSON(我没有安装 JSONP 提供程序),而我的客户端代码,如您所见,数据类型为“json”而不是“jsonp” ",我实际上是通过来自 Ajax 的 WebAPI 调用从我的数据库中获取 3 条记录,该调用在我的页面上的 WriteResponse(data) 方法中输出一个 HTML 表。很奇怪,嗯。但那只是当我在 JQuery 端启用 CORS 时。
        • 返回 json 其实不是我的意思...不会试图说服你...祝你好运。
        猜你喜欢
        • 2022-11-07
        • 1970-01-01
        • 2019-12-27
        • 1970-01-01
        • 2014-03-18
        • 1970-01-01
        • 2012-01-14
        • 2017-03-30
        • 1970-01-01
        相关资源
        最近更新 更多