通过 jQuery Ajax 方法访问 Node.js 服务遇到的问题
发布于 11 年前 作者 zhanyouwei 5776 次浏览 最后一次编辑是 8 年前

疑问:请求是成功的,但是跳到 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);
    }
});
8 回复

你…

用 JSONP…你服务端没实现啊… JSONP 的标准啊…能不报错吗…

…嗯…简单说一下 JSONP 吧… 你 jQuery Ajax 过来.应该会用一个 callback 参数的你输出的时候得 用 callback 的值包一层…

例如

?callback=xxx

你返回的时候得

xxx(你的内容)

就像楼上说的,你用的是JSONP。 AJAX 和 JSONP 是不一样的。由于AJAX无法跨域请求。所以才产生的JSONP。 看你的代码,不存在跨域的问题。所以dataType那里直接用"json"就行。

当然,如果你一定要用jsonp的话,就像楼上说的,服务器端实现callback。

我监听了8090端口,如果我用localhost:8090/…html访问的话会被nodejs监听到,所以我用了跨域,请问该怎么避免node监听我地址栏的html请求呢

嗯,谢谢指出问题,之前一直没用过跨域的访问,这次因为我node监听了8090端口,如果我使用http://…:8090/…html 来访问的话会被node监听一次,请问这个可以避免吗

@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.

回到顶部