oop js + $ .ajax将变量传递给父类

时间:2012-05-30 16:03:22

标签: javascript ajax oop

我正在尝试将变量从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>

2 个答案:

答案 0 :(得分: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
}

或者,您可以使用context的{​​{1}}选项更改回调中ajax的内容:

this

为您提供的两个附注:

  1. 回复:

    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
    }
    

    那里的function example(){ this.b; } 东西没有任何效果。这实际上是一个评论。特别是,它不会在对象上创建名为this.b的属性。

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

答案 1 :(得分:1)

得到了它!我正在使用我需要的数据并传递一个函数内部 ajax的成功! 的getData:函数(){

$.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

}