【问题标题】:Organize code in javascript Dojo working with XHR, REST使用 XHR、REST 在 javascript Dojo 中组织代码
【发布时间】:2012-11-15 18:44:22
【问题描述】:

我正在尝试在 Dojo 中组织我的代码,但我不明白事情是如何工作的。我想在 REST 调用后捕获 json 数据,但它不起作用。我分配 REST 返回的 testJson 属性始终为 NULL。

我该怎么做?我在下面复制了我当前的代码。 (我想在 ClassDAO 和 Controller 中使用我的代码。

define([
    'dojo/_base/declare',
    'dojo/request/xhr'
], function (declare, xhr) {

    return declare(null, {


        testJson: null,

        constructor: function(){

        },

        get: function(){

            xhr('/rest/reports', {
                method: 'get',
                handleAs: 'json',
                headers: {
                    Accept: 'application/json'
                }

            }).then(function(jsonData){

                    testJson = jsonData;

                }, function(err){
                    alert(err);
                }, function(evt){
                    // Handle a progress event from the request if the
                    // browser supports XHR2
                });

        }

    });
});

【问题讨论】:

  • 我很难理解你在说什么。我不知道您是否可以让以英语为第一语言的人在发布之前对您的问题进行校对?很抱歉我很粗鲁,这让你很难理解你在问什么。在这种情况下,我想我是从您的代码中弄清楚的。更重要的是,这里的问题和答案旨在成为其他人的资源。没有清晰的英语,这个目标很难实现。
  • 对不起我的英语,但我正在努力改进它。
  • 简历:我需要将 jsonData 放入 testJson(property)。我认为我的问题很容易理解。再次抱歉。
  • 我真的只是想提供帮助,而不是批评。我的大多数家人都住在海外,第一语言不是英语,我有来自许多欧洲国家的亲密朋友。这就是为什么我决定破译你的问题,因为我了解障碍。我的建议是在发布问题之前找一位校对员(如果可能的话)。您的问题根本不清楚,更像是机器翻译的文本,这会使其他人无法回答您并鼓励投反对票。希望这是有道理的。

标签: javascript class rest dojo dao


【解决方案1】:

看起来您正在尝试将类属性设置为变量;因此,

testJson = jsonData;

应该是:

this.testJson = jsonData

否则,您实际上是在设置全局变量 testJson,而不是属性。您还需要将 then() 函数限定为您的类:

.then(lang.hitch(this, function(jsonData){
    this.testJson = jsonData;
}))

lang 对象是 dojo/_base/lang,需要添加到 define()

define([
    "dojo/_base/declare",
    "dojo/request/xhr",
    "dojo/_base/lang"
], function (declare, xhr, lang) {

作用域是 Javascript 的一个重要概念,过去曾让我们感到困惑。有关详细信息,请参阅hitch() 命令的文档。

【讨论】:

  • 我的意图是财产。我以前尝试过这个,但它也不起作用。但是你的信息真的很有用。我会试试看,等我回去再说结果。
  • 我在链接上尝试了您的示例和其他示例,但还没有成功。
  • 您是否要等到 Json 加载完毕后再访问 testJson。 testJson 将保持为空,直到数据被加载,因为它是异步运行的。尝试在 then() 函数中添加一个 console.log,看看它是否真的在加载数据。
  • 你是对的。我已更改为 sync:true 现在工作正常。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-21
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多