疑问:请求是成功的,但是跳到 error 中执行,请问各位大侠这是怎么回事啊 直接上代码 Node.js 代码:
http.createServer(function(req, res) {
var url = parse(req.url),
pathname = url.pathname;
console.log('Request URL: http://127.0.0.1:8090' + url.href);
//解析URL参数到resource对象
req.resource = restparser.parse(pathname);
//resource.id 存在,表示是RESTful的请求
if (req.resource.id) {
res.writeHead(200, {
'Content-Type': 'text/plain'
});
restrouter.router(req, res, function(stringfyResult) {
res.end(stringfyResult);
});
} else {
res.writeHead(200, {
'Content-Type': 'text/plain'
});
console.log('Request URL is not in RESTful style!');
res.end('Request URL is not in RESTful style!');
}
}).listen(8090, '127.0.0.1');
console.log('Server running at http://127.0.0.1:8090/');
前端请求
$.ajax({
type: "GET",
url: "http://127.0.0.1:8090/resources/group",
contentType: "application/json; charset=utf-8",
dataType: "jsonp",
success: function(json) {
console.log(json);
},
error: function(error) {
console.log(error);
}
});
…嗯…简单说一下 JSONP 吧… 你 jQuery Ajax 过来.应该会用一个 callback 参数的你输出的时候得 用 callback 的值包一层…
例如
?callback=xxx
你返回的时候得
xxx(你的内容)
就像楼上说的,你用的是JSONP。 AJAX 和 JSONP 是不一样的。由于AJAX无法跨域请求。所以才产生的JSONP。 看你的代码,不存在跨域的问题。所以dataType那里直接用"json"就行。
当然,如果你一定要用jsonp的话,就像楼上说的,服务器端实现callback。
@zhanyouwei 为什么一定要跨域呢? nodejs监听8090, 然后你的静态文件也都放在nodejs的项目里就行了。不需要跨域。跨域是有很多安全性问题的。不是非常有必要的话,不要轻易跨域。 你可能刚开始使用node。用express做你的后端,http://expressjs.com/guide.html 看一下文档。你把你这个问题搞得太复杂了。
@Zhe Feng 把静态文件放在node项目里,是不是要将node发布出来呢,不然的话我在浏览器地址栏输入http://…:8090/…html的话,这个地址会被node当做一次请求监听, 我是刚刚接触node,我想刚刚接触的话直接使用express框架会不会门槛太高?毕竟node的东西还不熟
@zhanyouwei 你直接用express,门槛不高。用了再说。用一用你就熟悉了。肯定比你自己直接裸奔node简单。express就是把裸奔node做要做的东西封装了起来,从而变得简单。如果你直接裸奔node,反而复杂。比如bode parser, cookie, seesion, 都要你自己做。你练裸奔都不怕。何必担心express呢。 如果你实在很混乱,但有急用的话。那你可以联系我(如果你愿意的话)。我在线给你简单的演示一下,你就了解了。我的qq是249159201.