【问题标题】:Moodle API responseMoodle API 响应
【发布时间】:2026-01-21 08:05:02
【问题描述】:

我如何从 api 响应中挑选出信息以仅从特定响应字段中收集数据?

  var domainname = 'https://sandbox.moodledemo.net';
    var token = '234bc817adf979e93f442946c00aa223';
    var functionname = 'core_course_get_courses';
    var serverurl = domainname + '/webservice/rest/server.php' ;

    var data = {
                wstoken: token,
                wsfunction: functionname,
                moodlewsrestformat: 'json',
                
                }
    var response = $.ajax(
                            {   type: 'GET',
                                data: data,
                                url: serverurl
                            }
                         );
    console.log(response);

我正在尝试使用 response.responseJSON[] 或 response.statusText,但我收到错误或无法识别。

如何从 responseJSON 字段中获取数据?

Response output

【问题讨论】:

  • 你需要在done的回调中得到响应。 response.done(function (r) { console.log(r); });
  • 谢谢它的工作,但是 responseJSON 是什么意思?
  • 我只是给参数取了一个任意的名字,你可以给它任何你喜欢的名字
  • 如何将响应数据设置为变量?变量数据2; response.done(r=> { data = r return data2 });由于这返回 null
  • 是的,您可以返回数据,而不是您可以编写一个函数来设置数据。没有别的办法:(

标签: javascript node.js api moodle moodle-api


【解决方案1】:

您可以传递一个匿名函数来设置调用getData 函数的数据,在.done 内部:

function getData(fn) {
  var domainname = 'https://sandbox.moodledemo.net';
  var token = '<<token>>';
  var functionname = 'core_course_get_courses';
  var serverurl = domainname + '/webservice/rest/server.php';

  var data = {
    wstoken: token,
    wsfunction: functionname,
    moodlewsrestformat: 'json',

  }
  var response = $.ajax({
    type: 'GET',
    data: data,
    url: serverurl
  });
  // pass the function parameter
  response.done(fn);
}

// call
getData(function (r) {
    console.log(r, r.length);
});

替代.done,您也可以使用.then

【讨论】:

  • 我设法做到了 let self = this; response.then(r => { self.course1 = r[0].displayname; }),使用这个有什么负面影响
  • 如果您只关心设置变量,那也应该足够了
【解决方案2】:

这是未定义的,因为目前,当您在最后几行运行控制台时,响应尚未来自服务器。由于 Ajax 返回一个承诺,您可以附加 then()done() 以检索 JSON 数据。

var domainname = 'https://sandbox.moodledemo.net';
var token = '234bc817adf979e93f442946c00aa223';
var functionname = 'core_course_get_courses';
var serverurl = domainname + '/webservice/rest/server.php' ;

var data = {
  wstoken: token,
  wsfunction: functionname,
  moodlewsrestformat: 'json',

}
var response = $.ajax(
                      {   type: 'GET',
                          data: data,
                          url: serverurl
                      }
                   );
console.log(response);

response.then(res=>{  //======> Returns data in JSON format
  console.log(res)    
})
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"&gt;&lt;/script&gt;

【讨论】: