【问题标题】:How to consume Json Data in Jquery Ajax如何在 Jquery Ajax 中使用 Json 数据
【发布时间】:2014-07-18 06:02:30
【问题描述】:

我有一个 URL,它在浏览器上给出响应: https://api.sandbox.paypal.com/retail/merchant/v1/locations

它给出:

{
    "errorCode": 600031,
    "message": "Missing access token",
    "developerMessage": "You must provide an access token when calling this API. It can be passed as either a header of the form \"Authorization: Bearer \" or as a query parameter called access_token.",
    "errorType": "oauth/missing_access_token",
    "correlationId": "4de95cd8aa090"
}

我试过了:

$.ajax({
    url: "https://api.sandbox.paypal.com/retail/merchant/v1/locations",
    dataType: 'json',
    type: 'POST',
    success: function (data) {

        console.log(data); 
        alert("success", data);
    },
    error: function (data) {
        alert("fail", data);
        console.log(data);
        alert("Sorry..Please try again later"); 
    },
});

但我没有得到与浏览器相同的响应。我遇到了错误。

请在此处查看 http://jsfiddle.net/ajitksharma/wehGy/

但是在浏览器控制台上调试时出现错误:

XMLHttpRequest 无法加载 https://api.sandbox.paypal.com/retail/merchant/v1/locations。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'null' 不允许访问。

【问题讨论】:

  • 是服务器端错误
  • 我检查了,似乎服务器端响应是正确的 JSON 格式,我没有在服务器端更改的选项
  • 您必须提供访问令牌才能成功运行。

标签: javascript jquery ajax json paypal


【解决方案1】:

您可以对另一个域上的后端 API 进行 AJAX 调用,但是,它需要返回 JSONP 格式而不仅仅是 JSON,否则会出错。这是由于同源策略:https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy

本次讨论可能有助于理解 JSONP:Can anyone explain what JSONP is, in layman terms?

由于您无法控制 PayPal 的 API,并且您不能要求他们向您返回 JSONP,因此这些对 PayPal API 的请求需要从您的应用程序的服务器端脚本中完成。

【讨论】:

    【解决方案2】:

    从任何其他位置运行此程序,例如 JSFiddle,将给您Access-Control-Allow-Origin 错误,因为您正在发出跨域请求。请进一步阅读same-origin policy

    至于第一个错误,是因为您的请求需要来自 paypal 的 API 密钥。请参阅this page,了解获取 API 密钥并发出简单请求。

    【讨论】:

    • 嗯,我明白了,但是当我在浏览器上得到响应时,我会在浏览器上点击 URL,为什么不使用 AJAX。任何解决方案,如何允许跨域..我试过但无法得到结果
    • 除非 API 支持 JSONP,否则不能使用 AJAX 进行跨域请求。当您只是将 URL 粘贴到浏览器中时,您并没有跨域,您实际上是在他们的域中。
    【解决方案3】:

    正如 Lisa Stoz 和 kaminari 所建议的,如果没有一些补丁工作,就不可能调用另一个域中的服务。现在,当您通过浏览器点击该 url 时看到响应,它说您需要在 ajax 请求中添加一个额外的标头,例如“授权”

    【讨论】:

      猜你喜欢
      • 2021-08-28
      • 2018-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多