【问题标题】:Angular $http.jsonp - Server don't accept JSON_CALLBACKAngular $http.jsonp - 服务器不接受 JSON_CALLBACK
【发布时间】:2014-01-01 00:34:58
【问题描述】:

一切都在问题之中。

我必须使用一个 API,它只允许我使用 $http.jsonp 使用 angular 发出请求。我从服务器正确地得到响应,但 Angular 认为请求失败,因为我没有使用callback=JSON_CALLBACK。当我在请求中添加回调时,服务器向我发回一个错误 500,因为它不允许除了文档中的参数之外的任何其他参数。

我能做什么?我很茫然

谢谢

【问题讨论】:

    标签: javascript api angularjs jsonp


    【解决方案1】:

    为了让 JSONP 工作,它需要服务器端支持。如果您使用的 API 不提供对 JSONP 的任何支持,那么您根本无法使用 JSONP。

    为了使 JSONP 工作,服务器必须将它返回的 JSON 包装在一个函数调用中。通常,支持 JSONP 的 API 将通过某种方式传递可用作回调的函数名称。这不是标准的,每个 API 可能有不同的方式来指定回调。如果 API 不支持指定回调,那么您真的很不走运。

    我唯一能想到的另一件事是 API 所在的服务器是否支持 CORS。对于发出跨域请求,CORS 是比 JSONP 更好的替代方案,但仅适用于现代浏览器。

    唯一的其他选择是让您自己的服务器代表浏览器代理请求。这样做的缺点是到该第三方 API 的所有流量都必须通过您自己的应用程序的域。

    【讨论】:

    • 最终我需要向该服务器发出一个“简单”的 GET 请求,但由于某些原因,$http.get() 没有工作,因为服务器发回了 500 错误。我正在尝试与支持人员交谈,但到目前为止还没有。谢谢你的解释。如果没有更好的情况会接受
    • 服务器是否与您的应用程序在同一个域中?如果不是,那么 $http.get() 将不起作用,除非服务器和您的浏览器都支持 CORS。如果这是一个旨在用于不同域的第三方库,那么它们几乎肯定支持 JSONP。他们只需要告诉你如何在你的请求中发送回调。
    • 不,它是第三方。这是 Withings API link 我真的不确定他们是否支持 JSONP。我还认为,他们期望服务器到服务器的通信而不是服务器到客户端的通信......所以我最终可能不得不在某个地方设置我自己的服务器......
    猜你喜欢
    • 1970-01-01
    • 2014-10-04
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多