我正在尝试将变量从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>
答案 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
为您提供的两个附注:
回复:
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
的属性。
在您的原始代码中,除非您在某处宣布b
,否则您将成为The Horror of Implicit Globals的牺牲品。
答案 1 :(得分:1)
$.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
}