在Node.js服务器请求之后在浏览器端执行回调函数

时间:2014-05-11 19:58:22

标签: javascript ajax node.js

有没有办法在Node.js服务器的客户端(浏览器)执行Javascript代码而不使用 Socket.io ?像Callback函数那样从Node.js服务器获取响应,以便在向node.js服务器发起请求的浏览器上执行?

在普通的PHP / AJAX / Javascript通信中,当向PHP服务器发送请求时,有一个回调函数, xmlHTTP.responseText 将向我们提供服务器的响应以对浏览器采取操作!我想知道Node.js中是否有类似的东西?

更新

Node Server.js

var http=require('http');
var mysql = require('mysql');
var util = require('util');
var url = require('url');

var connection = mysql.createConnection({
   host     : 'localhost',
   user     : 'xxx',
   password : 'xxx',
   database : 'db_test',  //mysql database to work with (optional)
});
connection.connect(); //connect to mysql

var server=http.createServer(function(req,res){

    test(res);
});


server.on('listening',function(){
    console.log('ok, server is running');
});

server.listen(9000);


function test(res){
    var s = new Date().getTime();
    connection.query('INSERT INTO table_test.emails (email) VALUES   ("'+s+'")',function(err, result) {});

    res.end('{id:db_id, time:timestamp}');
}

浏览器(客户端)呼叫:

ajax.call({
    url: 'example.com/node',
    method: 'post',
    callback: function(){
        alert('Response received from node.js server');
    } 
});

我需要从节点server.js发送一个响应,以便在回调函数中的浏览器中执行。我怎样才能做到这一点?

我可以在javascript中使用eval来评估服务器上的代码吗?我需要从服务器输出如下: var response = {id:db_id,time:timestamp,etc ..}

所以我在浏览器上得到响应并在那里呈现结果。

如果你提供一个简单的例子,我将不胜感激。

感谢。

2 个答案:

答案 0 :(得分:0)

一种选择是在文档中插入一个脚本元素,并将src属性设置为所需的服务器请求,并使响应包含单个函数调用,通常将响应数据作为参数。这被称为“JSONP”。请注意,跨域策略不适用于这些请求。

另一种选择是传统的AJAX请求。从你的问题来看,我不明白为什么这不是一个自然的解决方案。

答案 1 :(得分:0)

我从没想过要轻松。在服务器端,响应将以以下格式发送:

res.end('{id:db_id, time:timestamp}');

在浏览器端,我通过以下方式接收并执行请求:

eval(xmlHttp.responseText);

感谢大家的参与。