【问题标题】:How to make a REST API Request with Ajax and session token?如何使用 Ajax 和会话令牌发出 REST API 请求?
【发布时间】:2020-06-17 00:21:31
【问题描述】:

我在使用 AJAX 遵循 API 指南时遇到了问题。我已成功从登录 api 获取会话令牌,因为需要会话令牌来请求 GET/POST 数据。

获取会话令牌的代码:

             
        var sessionToken = null;

        $.ajax({
          url: '<API-URL>/1/json/user_login/',
          data: {
          	'login_name' : 'USERNAME',
            'password' : 'PASSWORD'
          },
          type: 'GET',
          dataType: 'json',
          success: function(data) { 
            sessionToken = data.response.properties.session_token;
            $("#result").text("Got the token: " + sessionToken);
          },
          error: function(err) { console.log(err); },
          beforeSend: setHeader
        });
        
      function setHeader(xhr) {
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      }

成功后,我们得到会话令牌:D67ABD0454EB49508EAB343EE11191CB4389255465

{response: {…}}
response:
properties:
action_name: "user_login"
data: [{…}]
action_value: "0"
description: ""
session_token: "D67ABD0454EB49508EAB343EE11191CB4389255465"
__proto__: Object
__proto__: Object
__proto__: Object

现在我有了一个有效的会话令牌,我现在可以请求获取数据了。我正在尝试使用以下代码获取驱动程序数据:

            $.ajax({
            url: '<API-URL>/1/json/api_get_data/',
            data: {
              'license_nmbr' : vrn,
              'session_token' : sessionToken
            },
            type: 'POST',
            //dataType: 'json',
            success: function(data) {
              //var obj = JSON.parse(data);
              console.log(data);
            },
            error: function(err) { console.log(err); },
            beforeSend: setHeader
        });

根据文档,我需要使用 POST 而不是 GET 以便在响应中获取车辆详细信息并将会话令牌作为参数传递:

不幸的是,使用 GET 时似乎返回空白数据,而使用 POST 时,权限被拒绝。我尝试将参数作为文档发送为数组,但也失败了。我尝试将会话令牌作为授权传递,但仍然没有得到响应。

我从 API 支持团队得到的唯一帮助是:“POST 不能在端点上使用参数查询。”

我做错了什么?

感谢任何帮助。谢谢!

【问题讨论】:

  • 我想你只是传入了$.ajax({ data: {} }) 两个参数,但是你需要用请求示例图像中提供的所有变量来填充它。
  • 我会试一试,看看会发生什么,干杯
  • 很遗憾没有成功

标签: javascript jquery rest api


【解决方案1】:

我不知道您要调用什么服务/api,但从您发布的错误消息和简短文档看来,您的 url 结构错误:

$.ajax({
            url: '<API-URL>/1/json/api_get_data/',
            data: {
              'license_nmbr' : vrn,
              'session_token' : sessionToken
            },
            type: 'POST',
            //dataType: 'json',
            success: function(data) {
              //var obj = JSON.parse(data);
              console.log(data);
            },
            error: function(err) { console.log(err); },
            beforeSend: setHeader
        });

当您发布的文档暗示它应该是数据的一部分时(以及他们发送给您的“POST 不能与端点上的参数查询。”也支持这个)。因此,请尝试以下操作:(当然,如果没有查看更多文档,很难知道您的实际基本 url 是否正确)

$.ajax({
            url: '<API-URL>/1/json/',
            data: {
              'action': {'name':'api_get_data',
              'parameters': [ {'license_nmbr' : vrn }],

              'session_token' : sessionToken
              }
            },
            type: 'POST',
            //dataType: 'json',
            success: function(data) {
              //var obj = JSON.parse(data);
              console.log(data);
            },
            error: function(err) { console.log(err); },
            beforeSend: setHeader
        });

【讨论】:

  • 不幸的是,我收到了 404。如果你愿意,我可以把 jsfiddle 发给你吗?我真的不想在这里发布它,因为上面有凭据。
  • 如果你得到一个 404,那么现在听起来 url 是错误的。从文档中它应该为您提供您需要调用的基本网址。您可以尝试从中删除尾随的“/”,尽管这实际上并不重要。您至少可以分享一个指向相关文档的链接吗?
猜你喜欢
  • 1970-01-01
  • 2016-09-07
  • 2019-02-19
  • 1970-01-01
  • 2018-08-22
  • 2013-11-16
  • 1970-01-01
  • 1970-01-01
  • 2020-12-10
相关资源
最近更新 更多