已经发布了类似的问题,但没有一个与我遇到的问题完全匹配。我正在对内部服务器进行简单的POST以获取产品数据。调用成功,当我在服务器端执行console.log时,我看到JSON数据正确记录到我的终端。问题出现在客户端,在回调中,结果和错误都是未定义的。
服务器:
Meteor.methods({
ProductSearch: function(searchTerm) {
var method = 'POST';
var url = 'server';
var options = {
headers:{"content-type":"application/json"},
data: {
query:"trees"
}
};
return HTTP.call(method, url, options, function (error, result) {
if (error) {
console.log("ERROR: ", result.statusCode, result.content);
} else {
var txt = JSON.parse(result.content);
console.log("SUCCESS: Found "+txt.totalResults+" products");
}
});
}
});
客户端:
Meteor.call('ProductSearch', searchTerm, function (error, result) {
if (error) {
console.log("error occured on receiving data on server. ", error );
} else {
var respJson = JSON.parse(result.content);
Session.set("productSearchResults", respJson);
}
});
当我在回调时记录错误和结果的值时,它们都是未定义的,并且我收到以下错误:传递结果的异常调用' ProductSearch':TypeError:无法读取属性'内容'未定义的
答案 0 :(得分:1)
在您的服务器端方法中,您没有正确返回HTTP.call
的结果,因为您使用的是异步版本,HTTP.call
将返回undefined
并且结果只能在回调中访问。
使用HTTP.call
的同步版本,你会没事的。
try{
var result = HTTP.call(method, url, options);
return JSON.parse(result.content);
}
catch(exception){
console.log(exception);
}
有关其他信息,请参阅HTTP.call
的相应文档。
asyncCallback 功能
可选回调。如果通过,则该方法运行 异步,而不是同步,并调用asyncCallback。上 客户端,这个回调是必需的。