我使用YQL和jQuery.ajax从另一个网站检索内联JavaScript变量。此变量包含base64编码的完整XML文档。
当AJAX请求正常工作时,我无法弄清楚如何获取res.query.results
并将其附加到动态制作的<script>
元素。
这里是jQuery:
$.ajax({
url: "http://query.yahooapis.com/v1/public/yql/dj/fsp?format=json",
type: "GET",
success: function(res) {
var sc = $('script');
$(sc).append(document.createTextNode('var '+$(res.query.results)));
$('head').append(sc);
}
});
这是控制台日志告诉我的内容:
任何想法或建议将不胜感激。谢谢大家!
答案 0 :(得分:1)
三件事:
要创建脚本元素,您需要$('<script>')
,而不是$('script')
。后者搜索所有script
元素。
不需要createTextNode
,jQuery会为您处理。
您通过拨打$()
来过度执行此操作:
var sc = $('<script>');
sc.append(document.createTextNode('var '+res.query.results));
// ^ #1 (see below) ^ #2
您不想再次$(sc)
,它毫无意义,它已经是一个jQuery实例。
您不希望解析 res.query.results
到jQuery实例中,您希望将字符串抓取到JavaScript变量中(显然)。
<!DOCTYPE html>
<html>
<head>
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<meta charset="utf-8">
<title>Example</title>
</head>
<body>
<script>
(function() {
"use strict";
display("Doing query...");
$.ajax({
url: "http://query.yahooapis.com/v1/public/yql/dj/fsp?format=json",
type: "GET",
success: function(res) {
display("Got result, creating <code>script</code>...");
var sc = $('<script>');
sc.append('var '+res.query.results);
$('head').append(sc);
display("length of <code>txt</code> global variable: " + window.txt.length);
}
});
function display(msg) {
var p = document.createElement('p');
p.innerHTML = String(msg);
document.body.appendChild(p);
}
})();
</script>
</body>
</html>