【问题标题】:Using objects to correctly replace global variables使用对象正确替换全局变量
【发布时间】:2010-11-18 01:21:28
【问题描述】:

我一直在尝试弄清楚如何使用原型初始化对象,以便使用全局变量进行转义,这是我第一次了解here。我开始实现我自己版本的在接受的答案中找到的代码。

function XML_Data() {
  this.data = null;
}

XML_Data.prototype = {
 GetXML: function() {
  $.ajax({
   type: "GET",
   url: "questions.xml",
   dataType: "xml",
   success: function(xml) {
    this.data=xml;
   } //close success
  });//close AJAX  
 },

 UseXML: function() {
  alert(this.data)
 }
};

(我的脚本实现)


但是,我遇到了一个问题。当我使用这段代码运行此处显示的函数时:

var data = new XML_Data();
data.GetXML();
data.UseXML();

我收到一条提示“null”的警报。我已经阅读了十几次代码,但由于这是我第一次使用 Javascript,很明显我错过了一些东西。你能指出来吗?

谢谢,艾略特·邦纳维尔。

【问题讨论】:

  • 您想立即使用 Ajax 数据吗?您多久通过 Ajax 获取新数据?
  • 只有一次,在通话开始时。

标签: javascript html object


【解决方案1】:

注意

var data = new XML_Data();
data.GetXML();  //This will run the ajax request
data.UseXML();  //This will most likely run before the ajax request is finished.

在 Jquery 中发布事件可能会起作用,但我还没有测试过这段代码。

function XML_Data() {
  this.data = null;
}

XML_Data.prototype = {
 GetXML: function() {
  $.ajax({
   type: "GET",
      url: "questions.xml",
   dataType: "html",
   success: function(xml) {
    this.data=xml;
    $(window).trigger("myAjaxEvent");
   } //close success
  });//close AJAX  
 },

 UseXML: function() {
  alert(this.data)
 }
};


$(document).ready( function () {
    var data = new XML_Data();
    $(window).bind("myAjaxEvent", function () {
      data.UseXML();
    });

    data.GetXML();

});

【讨论】:

  • 是这样吗?我该如何解决?
  • @Elliot ...您可以尝试使用 jquery 发布事件
【解决方案2】:

您现在拥有的代码正在尝试使用非阻塞异步 API 同步(按顺序)运行。 UseXML 调用发生在 GetXML 调用实际完成其 AJAX 操作之前,因为它是异步的。

您可以用异步模式(其中 this.UseXML 在 AJAX 请求成功时直接调用)或同步模式(其中“async:false”被传递给 AJAX 调用)来编写它。异步模式在 JavaScript 开发中更为常见,因为它更强大,同步请求通过阻止脚本执行来阻止浏览器中的 UI,但对于小事情来说,同步更容易做到。

http://api.jquery.com/jQuery.ajax/

【讨论】:

    猜你喜欢
    • 2014-12-08
    • 2019-08-26
    • 1970-01-01
    • 2013-05-06
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    相关资源
    最近更新 更多