【问题标题】:oop js + $.ajax passing variables to father classoop js + $.ajax 将变量传递给父类
【发布时间】:2012-05-30 16:03:21
【问题描述】:

我正在尝试将 xml 文件中的变量传递给 js 中的父类: 代码基本上是 OOP js。 类为示例,方法为getData()。

问题是 ajax 调用不返回整个值,只返回 int 值.. 很奇怪,我知道。

(因 T.J. Crowder 而改变:)

function example(){
    this.b;
    this.str;
}
example.prototype ={
    getData:function(){
        $.ajax({
                type: "GET",
                url: "Bar.xml",
                dataType: "xml",
                            context: this,
                success: function(xml) {
                    this.b = parseInt($(xml).find('current_madad').text()); //int_from_xml- works!
                           this.str = $(xml).find('graph_title').text(); //string_from_xml - doesnt work!!
            }
        })//end ajax    
    }
};

var c = new example();
c.getData();

xml 文件在这里。发布以便您也可以查看该代码..

<?xml version="1.0" encoding="utf-8"?>
<root>
  <Bars>
    <Bar>
      <bar_start>1010</bar_start>
      <lower_danger_zone>1030</lower_danger_zone>
      <mid_safe_zone>1050</mid_safe_zone>
      <upper_danger_zone>1150</upper_danger_zone>
      <upper_fbdn_zone>1200</upper_fbdn_zone>
      <bar_range>200</bar_range>
      <ideal_range>5</ideal_range>
      <current_madad>1115</current_madad>
    </Bar>
  </Bars>
  <Bars_Desc>
    <Bar>
      <graph_title>פוזיצית אפריל</graph_title>
      <lower_fbdn_zone_Desc>תחום אסור תחתון תיאור</lower_fbdn_zone_Desc>
      <lower_danger_zone_Desc>תחום מסוכן תחתון תיאור</lower_danger_zone_Desc>
      <mid_safe_zone_Desc>תחום בטוח אמצעי תיאור</mid_safe_zone_Desc>
      <mid_safe_ideal_zone_Desc>תחום בטוח פקיעה אידיאלית תיאור</mid_safe_ideal_zone_Desc>
      <upper_danger_zone_Desc>תחום מסוכן עליון תיאור</upper_danger_zone_Desc>
      <upper_fbdn_zone_Desc>תחום אסור עליון תיאור</upper_fbdn_zone_Desc>
    </Bar>
  </Bars_Desc>
</root>

【问题讨论】:

  • 欢迎来到 async 的精彩世界!你不能那样做。
  • 父类在哪里,只有一个类似乎没有扩展任何东西

标签: javascript ajax oop


【解决方案1】:

ajax 调用是异步的getData 开始调用,但它稍后完成,在 getData 返回之后,所以当你分配给 this.b 时,a 还没有被成功回调设置.您需要更改您的getData 电话:

getData:function(){
    var self = this;           // <=== Set up a reference to `this`
    alert("functionlasdkfj");
    $.ajax({
            type: "GET",
            url: "Bar.xml",
            dataType: "xml",
            success: function(xml) {
                self.b = 1;    // <=== Use it to set `b` directly
        }
    })//end ajax
}

或者,您可以使用ajaxcontext 选项来更改回调中this 的内容:

getData:function(){
    alert("functionlasdkfj");
    $.ajax({
            type: "GET",
            url: "Bar.xml",
            dataType: "xml",
            context: this,     // <=== Set `context`
            success: function(xml) {
                this.b = 1;    // <=== Now you can set `b` directly
        }
    })//end ajax
}

给你的两个旁注:

  1. 回复:

    function example(){
        this.b;
    }
    

    this.b 的东西没有任何作用。这实际上是一个评论。特别是,它不会在对象上创建名为 b 的属性。

  2. 在您的原始代码中,除非您在某处声明 a,否则您将成为 The Horror of Implicit Globals 的牺牲品。

【讨论】:

  • 好的,我已经使用了它,它在第二次调用时将值传递给类(我设置了一个间隔,以便刷新数据)。但它只提取整数数据而不是搅拌!什么都试过了……很奇怪吗?
  • @user1392330:这表明您的 XML 中没有 graph_title XML 节点。
  • 1.我的 xml 中有一个 graph_title 。 2. 当我删除 this.b 时,我得到错误 not defined On this.b = xml_data...
  • @user1392330:回复 1:将 XML 发布到您的问题中,最好在 jsbin.com 上展示一个完整的工作示例。我看不出一个如何工作,而另一个没有。 2. 不,抱歉,else 可能正在发生,但是从构造函数中删除完全不必要的 this.b; 行并没有使 ajax 成功回调中的该行失败。不在 JavaScript 中。
  • 1 .poseted.. jsbin.com 不能包含 xml 文件.. 可以吗?
【解决方案2】:

知道了!我正在使用我需要的数据并将其传递给 inside ajax 的成功函数! 获取数据:函数(){

$.ajax({
        type: "GET",
        url: "Bar.xml",
        dataType: "xml",
        context: this,     // <=== Set `context` - this helped me BTW
        success: function(xml) {
           arr.f1 = 1;    // 
           arr.f2 = 876;
           pass_data_to_data_handler_function(arr); //<= so I am waiting for response

})//end ajax

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 2012-04-21
    相关资源
    最近更新 更多