无法获取秘银中的响应内容
Cannot get response content in mithril
我一直在尝试向 NodeJS API 发出请求。对于客户端,我使用的是 Mithril 框架。我使用他们的第一个例子来发出请求并获取数据:
var Model = {
getAll: function() {
return m.request({method: "GET", url: "http://localhost:3000/store/all"});
}
};
var Component = {
controller: function() {
var stores = Model.getAll();
alert(stores); // The alert box shows exactly this: function (){return arguments.length&&(a=arguments[0]),a}
alert(stores()); // Alert box: undefined
},
view: function(controller) {
...
}
};
在 运行 之后,我通过 Chrome 开发人员工具注意到 API 正确响应以下内容:
[{"name":"Mike"},{"name":"Zeza"}]
我找不到将此数据获取到控制器中的方法。他们提到使用这种方法,var 可能会保持 undefined
直到请求完成,所以我在下一个示例中添加了:
var stores = m.prop([]);
在模型之前并将请求更改为:
return m.request({method: "GET", url: "http://localhost:3000/store/all"}).then(stores);
我可能做错了什么,因为我得到了相同的结果。
objective是从response中获取数据,发送给view进行迭代
解释:
m.request 是一个函数,m.request.then() 也是,这就是为什么 "store" 值为:
"function (){return arguments.length&&(a=arguments[0]),a}"
"stores()"是未定义的,因为你做的是async ajax请求,所以你不能立即得到结果,需要稍等一下。如果您在延迟一段时间后尝试 运行 "stores()",您的数据将在那里。这就是为什么你基本上需要承诺("then" 功能)。作为 "then(param)" 的参数传递的函数在响应就绪时执行。
工作样本:
您可以开始玩这个示例,并实现您需要的东西:
var Model = {
getAll: function() {
return m.request({method: "GET", url: "http://www.w3schools.com/angular/customers.php"});
}
};
var Component = {
controller: function() {
var records = Model.getAll();
return {
records: records
}
},
view: function(ctrl) {
return m("div", [
ctrl.records().records.map(function(record) {
return m("div", record.Name);
})
]);
}
};
m.mount(document.body, Component);
如果您有更多问题,请随时在这里提问。
我一直在尝试向 NodeJS API 发出请求。对于客户端,我使用的是 Mithril 框架。我使用他们的第一个例子来发出请求并获取数据:
var Model = {
getAll: function() {
return m.request({method: "GET", url: "http://localhost:3000/store/all"});
}
};
var Component = {
controller: function() {
var stores = Model.getAll();
alert(stores); // The alert box shows exactly this: function (){return arguments.length&&(a=arguments[0]),a}
alert(stores()); // Alert box: undefined
},
view: function(controller) {
...
}
};
在 运行 之后,我通过 Chrome 开发人员工具注意到 API 正确响应以下内容:
[{"name":"Mike"},{"name":"Zeza"}]
我找不到将此数据获取到控制器中的方法。他们提到使用这种方法,var 可能会保持 undefined
直到请求完成,所以我在下一个示例中添加了:
var stores = m.prop([]);
在模型之前并将请求更改为:
return m.request({method: "GET", url: "http://localhost:3000/store/all"}).then(stores);
我可能做错了什么,因为我得到了相同的结果。
objective是从response中获取数据,发送给view进行迭代
解释:
m.request 是一个函数,m.request.then() 也是,这就是为什么 "store" 值为:
"function (){return arguments.length&&(a=arguments[0]),a}"
"stores()"是未定义的,因为你做的是async ajax请求,所以你不能立即得到结果,需要稍等一下。如果您在延迟一段时间后尝试 运行 "stores()",您的数据将在那里。这就是为什么你基本上需要承诺("then" 功能)。作为 "then(param)" 的参数传递的函数在响应就绪时执行。
工作样本:
您可以开始玩这个示例,并实现您需要的东西:
var Model = {
getAll: function() {
return m.request({method: "GET", url: "http://www.w3schools.com/angular/customers.php"});
}
};
var Component = {
controller: function() {
var records = Model.getAll();
return {
records: records
}
},
view: function(ctrl) {
return m("div", [
ctrl.records().records.map(function(record) {
return m("div", record.Name);
})
]);
}
};
m.mount(document.body, Component);
如果您有更多问题,请随时在这里提问。