【发布时间】:2016-04-14 03:32:08
【问题描述】:
我有一个使用 node 运行的简短 javascript 脚本(例如node runScript.js)。在其中,我使用tiptoe,并且尝试了各种方法来检索 xml 文件,但均未成功。
tiptoe(
function getESData() {
var json;
// get the json data.
for (var i = 0; i < json.hits.hits.length; i++) {
for (var multiId = 0; multiId < json.hits.hits[i]._source.multiverseids.length; multiId++) {
var priceUrl = "http://partner.tcgplayer.com/x3/phl.asmx/p?pk=TCGTEST&s="+setName+"&p="+json.hits.hits[i]._source.name
console.log("fetching " +priceUrl );
// attempt 1:
var x = new XMLHttpRequest();
console.log("working"); // THIS CONSOLE LOG NEVER SHOWS UP.
x.open("GET", priceUrl, true);
console.log("working");
x.onreadystatechange = function() {
if (x.readyState == 4 && x.status == 200)
{
console.log(x.responseXML);
}
};
x.send();
// attempt 2:
$.ajax({
url: priceUrl,
success: function( data ) {
console.log(data);
}
});
// attempt 3:
$.get(priceUrl, function(data, status){
console.log("Data: " + data + "\nStatus: " + status);
});
}
}
});
}
);
在打印第一个 console.log 后,我在其中记录了 url 以确保它有效,所有这些方法都静默失败(显然我在测试时注释掉了除一个之外的所有方法,我不会一次使用所有三个)。 (带有变量的 url 解析为:http://partner.tcgplayer.com/x3/phl.asmx/p?pk=TCGTEST&s=Ice Age&p=Arnjlot's Ascent,当我在浏览器中测试它时,它绝对返回 xml,所以我知道这是有效的)。是踮起脚尖吗?
编辑:尝试 4:
$().ready(function () {
console.log('working');
$.get(priceUrl, function (data) {
console.log(data);
});
});
在“工作”日志出现在我的控制台之前,这也会失败。不确定这是否重要,但我也在为此使用 git bash 控制台。
编辑2:答案是使用request,方式如下:
request(priceUrl, function(error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body);
}
})
效果很好。
【问题讨论】:
-
url 编码你的字符串 man
-
我猜问题出在你的 for 循环上。将脚尖带入 for 循环将为您完成任务,因为脚尖一个接一个地按串行顺序执行每个函数。
标签: javascript jquery ajax xml node.js