-3

変数を 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>
4

2 に答える 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

}

于 2012-05-31T06:22:37.300 に答える
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
}

あなたのための2つの補足事項:

  1. Re:

    function example(){
        this.b;
    }
    

    そこthis.bにあるものは何の効果もありません。これは実質的にコメントです。b特に、オブジェクトで呼び出されるプロパティは作成されません。

  2. 元のコードでは、aどこかで宣言しない限り、 The Horror of Implicit Globals の餌食になっていました。

于 2012-05-30T16:07:55.063 に答える