无法以正确的格式转换REST请求的JQuery结果

时间:2016-10-14 09:28:34

标签: javascript jquery rest

我正在使用JQuery对一组对象进行REST请求。

在代码的“成功”部分,一切都很好 - 数组中的对象被转换为正确的类型。但是,当我尝试将它们分配给变量(docStructures)并将变量移出JQuery方法时,对象变为“未定义”。

如何避免这种情况并将变量传递给方法范围之外的持久化对象的正确类型?

jQuery.ajax({
  type: 'GET',
  url: contextPath + "/rest/dcm-jira/1.0/document/structure",
  data: {
    "issueId": selectedRevision.issueId
  },
  success: function(structures) {
    docStructures = structures;
    console.log(docStructures)
  },

});
console.log(docStructures)

3 个答案:

答案 0 :(得分:1)

AJAX是异步的,你不能从它返回任何东西。您应该仅在成功回调

中使用AJAX请求的结果

答案 1 :(得分:1)

代码中有问题的行是:

jQuery.ajax({
  type: 'GET',
  url: contextPath + "/rest/dcm-jira/1.0/document/structure",
  data: {
    "issueId": selectedRevision.issueId
  },
  success: function(structures) {
    docStructures = structures;
    console.log(docStructures)
  },

});
// problematic
console.log(docStructures)

问题是它在ajax请求完成之前执行。否则一切都应该正常工作

另外,在success:{}, < - 之后你还有一个额外的逗号,你应该删除它

答案 2 :(得分:0)

成功函数以异步方式执行,即浏览器执行:

  1. 你的jQuery.ajax声明
  2. 然后是jQuery.ajax语句之后的console.log语句
  3. 然后,在Ajax请求成功后,执行成功函数
  4. 中的console.log

    无法将数据置于成功函数范围之外。

    为了让你的代码看起来更整洁,你可以使用jQuery的延迟机制:

    var myAjaxRequest = jQuery.ajax({ 
        type: 'GET',
        url: contextPath + "/rest/dcm-jira/1.0/document/structure",
        data: {
            "issueId": selectedRevision.issueId
        }
    });
    
    myAjaxRequest.done(function (structures) {
        docStructures = structures;
        console.log(docStructures)
    });