-3

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

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

(由于 TJ 克劳德而改变:)

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>
4

2 回答 2

1

ajax调用是异步的。getData 开始调用,但它稍后完成,在getData返回之后,所以当你分配给时this.ba成功回调尚未设置。你需要改变你的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选项ajax来更改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牺牲品。

于 2012-05-30T16:07:55.063 回答
1

知道了!我正在使用我需要的数据并将其传递给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

}

于 2012-05-31T06:22:37.300 回答