Упс JS + $ .AJAX передачи переменных в класс отца

-2

Я пытаюсь передать переменные из xml файла в класс отца в js: код в основном представляет собой OOP js. Класс является примером, а метод - getData().

дело в том, что вызов ajax не возвращает целых значений, просто int. Странно, я знаю.

(изменено из-за TJ 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>
  • 0
    Добро пожаловать в удивительный мир асинхронности ! Вы не можете сделать это.
  • 0
    где класс «папа», есть только один класс, который ничего не расширяет
Теги:
oop

2 ответа

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

}

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 возможность 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. Re:

    function example(){
        this.b;
    }
    

    Материал this.b там не имеет никакого эффекта. Это эффективно комментарий. В частности, он не создает свойство b на объекте.

  2. В исходном коде, если вы не объявили a где - то, что ты жертвой Ужас неявных Globals.

  • 0
    Хорошо, я использовал его, и он передает значения классу при втором вызове (я установил интервал, чтобы данные обновлялись). но он тянет только целочисленные данные, а не перемешивает! все перепробовал ... странно нет?
  • 0
    отредактировал тело вопроса, чтобы вы могли видеть
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню