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

oop js + $.ajax passing variables to father class

本文关键字:父类 变量 js ajax 哎呀      更新时间:2023-09-26

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

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

(由于T.J.克劳德而更改:)

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>

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,否则你就会成为隐式全局的恐怖的牺牲品。

明白了!我正在使用我需要的数据,并通过它在 ajax 的成功抛出一个函数!getData:function(){

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

}