Javascript 使用jquery将整个文件作为字符串分配给变量
我试图将xml文件的内容分配给var,如下所示:Javascript 使用jquery将整个文件作为字符串分配给变量,javascript,jquery,Javascript,Jquery,我试图将xml文件的内容分配给var,如下所示: var testing = $.load('xx.xml'); $('#display').text(testing); 但它不起作用。我尝试了以下建议的“.load”功能: 我查看了他们从jquery网站上建议的页面,但是我找不到将.xml文件的内容作为字符串分配给var的特定内容 我明白这可能是非常明显的&我可以说是懒惰,但我已经尝试了一段时间随机的事情&无法理解这一点 谢谢 编辑!我在加载函数中加载内容,我不是这个意思,它现在已编辑。没
var testing = $.load('xx.xml');
$('#display').text(testing);
但它不起作用。我尝试了以下建议的“.load”功能:
我查看了他们从jquery网站上建议的页面,但是我找不到将.xml文件的内容作为字符串分配给var的特定内容
我明白这可能是非常明显的&我可以说是懒惰,但我已经尝试了一段时间随机的事情&无法理解这一点
谢谢
编辑!我在加载函数中加载内容,我不是这个意思,它现在已编辑。没有
$。加载函数。您可能想要的是:
由于文件是异步检索的,因此需要将结果分配给回调内的变量,该变量在请求成功返回时执行。但是请注意,如果在.get
调用之后尝试运行依赖于xml
的代码,xml
将是未定义的,因为回调尚未运行。例如:
var xml;
$.get("xx.xml", function(data) {
xml = data;
//Do stuff with data here
});
console.log(xml); //Most likely undefined because asynchronous call has not completed
如果尝试将结果插入DOM元素,则可以使用以下方法:
如果您试图使用ajax从服务器获取xml,您可以尝试以下方法-
function getXml()
{
var contents;
$.ajax({ url :'/website/method', type: 'GET', dataType :'xml', async : false,
cache : true, success : function(myXml){
contents = myXml;
}
});
return contents;
}
首先,$.load
不是最新jQuery源代码中定义的函数,也不是jQuery站点上的文档
其次,假设您没有修改jQuery的全局AJAX设置,jQuery.fn.load
和其他请求函数将是异步的,因此您不能只将结果分配给变量,因为函数在请求完成之前返回。您需要使用回调处理程序
尝试使用带有回调函数的$.ajax
:
var testing;
$.ajax('xx.xml', {
dataType: 'text',
success: function (data) {
testing = data;
$('#display').text(testing);
}
});
由于您希望数据为文本,并且文件显示为XML,因此我们使用dataType
告诉jQuery以字符串形式返回数据 正如Alex R.所说,文本只用于字符,而不是HTML。还有,你为什么要在调用中加载var?哎呀,那是一个学童错误,我粘贴了一个旧版本,代码更改了。@MarcoJohannesen,它实际上不起作用,所以我不得不收回我的答案。我没有试图将它插入DOM元素,是的,但这不是我要实现的主要目标,这只是为了证明它已加载。然后使用我答案中的第一个示例。这样做是行不通的:var xml;$。get(“xx.xml”,函数(数据){xml=data;})$(“#某处”).html(xml)
因为它是在变量赋值后调用的,即在get callNo之后调用的,因为xml
将未定义
,因为异步调用不会完成。您必须将$(“#某处”).html(xml)
行放在回调中。看我的编辑,我明白了。有没有办法强制.get调用获取文件并将内容分配给一个变量,然后在另一个函数中使用该变量(当然不是将另一个函数放入回调函数中)。使用此方法,调用getXml()
将返回未定义的,因为返回内容代码>行将在AJAX调用完成之前运行。@James:saarthak在示例代码中专门设置了async:false
,因此这实际上应该按预期工作。然而,使用同步请求通常不是一个好主意-它们会锁定用户界面,阻止用户与页面交互,MDN站点表明它们容易出现内存泄漏。@AndyE-哦,是的,我错过了这一点!抱歉,saarthak。当我执行此操作并执行alert(testing)
时,它返回Object[XML Object]。为什么会这样,我怎么才能得到一根漂亮的线呢?
function getXml()
{
var contents;
$.ajax({ url :'/website/method', type: 'GET', dataType :'xml', async : false,
cache : true, success : function(myXml){
contents = myXml;
}
});
return contents;
}
var testing;
$.ajax('xx.xml', {
dataType: 'text',
success: function (data) {
testing = data;
$('#display').text(testing);
}
});