因此,我有一个Node.js服务器,该路由可以完成一件事。在客户端上单击按钮时,它会转到此处并从外部API提取数据。
app.get('/ajaxcall', function(req, res) {
const options = {
url: 'hidden url',
method: 'POST',
};
request(options, function(err, request, body) {
if (err) {
request.send('There was an error with fetching API');
}
else {
console.log(res.statusCode);
return res.end(JSON.stringify(body));
}
});
});
然后我要使用该位,并从服务器获取此数据。
$(document).ready(function(){
$('#searchButton').click(function(event){
event.preventDefault()
$.ajax({
type: 'GET',
url: '/ajaxcall',
})
.done(function(result){
let data = jQuery.parseJSON(result);
console.log(data)
console.log(data[0].formatted_address)
})
.fail(function(xhr, status, error){
console.log(error)
})
.always(function(data){})
})
})
问题是console.log(data)
会将所有内容输出到控制台,但是console.log(data.[0].formatted_address)
输出未定义。
我正在尝试从返回的JSON中获取数据,因此可以将其显示在网站上。谁能告诉我为什么console.log(formatted_address)在客户端不起作用,而在服务器端起作用?有没有办法遍历这个JSON对象并选择我需要的位?
这是JSON的外观 JSON screenshot
答案 0 :(得分:0)
如果您发布的JSON是在前端的data
变量中反序列化的内容,则似乎data
是一个包含results
字段的JSON对象,数组而不是data
对象本身就是一个数组。
尝试类似data.results[0].formatted_address
答案 1 :(得分:0)
这里是一个示例,说明如何使用forEach数组函数将.done函数更改为循环某些数据。
.done(function(result){
let data = jQuery.parseJSON(result);
data.results.forEach(function(result) {
console.log(result.formatted_address);
console.log(result.geometry.location.lat, result.geometry.location.lng);
console.log(result.icon);
});
})