假设我有一个只有一个项目的简单XML ...
<myXML>
<valuesItem
name = 'name'
age = 'age'
gender = 'gender'
/>
</myXML>
...并且只想将项目的属性值导入为jQuery对象的新值,如下所示......
var myObject = {
name: 'name',
age: 'age',
gender: 'gender'
};
......我怎么回事???
我试图实现这样的目的但到目前为止我没有成功:
var myObject = {};
$.get(myXML.xml, function(xmlData) {
var xmlValues = {};
$(xmlData).find('valuesItem').each(function() {
var $item = $(this);
xml Values = {
name: $item.attr('name'),
age: $item.attr('age'),
gender: $item.attr('gender')
};
});
$.extend(myObject, xmlValues);
});
如何公开$ .get()返回结果?
答案 0 :(得分:3)
这里的问题是你正在进行异步的ajax调用。要么使用$ .ajax并将调用设置为不是异步,要么必须使用xml数据,则必须在$ .get调用的success函数中调用函数。
例如,你可以这样做:var myObject = {};
$.ajax({
type: 'get',
url: 'myXML.xml',
dataType: 'xml',
async: false,
success: function ( xmlData ) {
$(xmlData).find('valuesItem').each(function() {
var $item = $(this);
myObject = {
name: $item.attr('name'),
age: $item.attr('age'),
gender: $item.attr('gender')
};
});
}
});
//here myObject is set because it waits for the call to finish
答案 1 :(得分:1)
你可以这样做。
var myObject = {};
$.ajax({
type: 'get',
url: 'myXML.xml',
dataType: 'xml',
success: function ( data ) {
myObject = data;
}
});
HOWEVER ,如果您在$.ajax()
之后直接放置处理xml的代码,则会遇到各种错误,因为调用尚未完成。
最好将所有逻辑放在成功函数中,如此...
$.ajax({
type: 'get',
url: 'myXML.xml',
dataType: 'xml',
success: function ( data ) {
//do stuff with data here
//the variable "data" holds all of your xml, parsed into a JavaScript object
}
});
因为服务器已响应请求,所以不会调用成功。
编辑:您可能会为您的特定用例做更好的事情。
首先定义一个带参数data
的函数并设置插件
startPlugin = function ( data ) {
var newoptions = {};
newOptions.name = data.myXML.valuesItem.name;
newOptions.age = data.myXML.valuesItem.age;
newOptions.gender = data.myXML.valuesItem.gender;
//start the plugin here with newOptions
}
然后,将该函数作为成功回调传递给ajax。
$.ajax({
type: 'get',
url: 'myXML.xml',
dataType: 'xml',
success: startPlugin
});
同样在$.ajax()
中,您可以将async
设置为false以使请求同步,但这被视为不良做法。