这类似于Node.js的Stream数据,但是我觉得这个问题没有得到足够的回答。
我正在尝试使用jQuery ajax调用(get,load,getJSON)在页面和node.js服务器之间传输数据。我可以从浏览器中找到该地址,然后看到“ Hello World!”,但是当我从页面尝试此操作时,它失败并显示没有任何响应。我设置了一个简单的测试页面和hello world示例进行测试:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title>get test</title> </head> <body> <h1>Get Test</h1> <div id="test"></div> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.js"></script> <script> $(document).ready(function() { //alert($('h1').length); $('#test').load('http://192.168.1.103:8124/'); //$.get('http://192.168.1.103:8124/', function(data) { // alert(data); //}); }); </script> </body> </html>
和
var http = require('http'); http.createServer(function (req, res) { console.log('request received'); res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(8124);
如果您的简单测试页位于hello world node.js示例之外的其他协议/域/端口上,则说明您正在执行跨域请求并违反了相同的原始策略,因此jQuery ajax调用(获取和加载)无提示地失败。为了获得跨域工作,您应该使用基于JSONP的格式。例如node.js代码:
var http = require('http'); http.createServer(function (req, res) { console.log('request received'); res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('_testcb(\'{"message": "Hello world!"}\')'); }).listen(8124);
和客户端JavaScript / jQuery:
$(document).ready(function() { $.ajax({ url: 'http://192.168.1.103:8124/', dataType: "jsonp", jsonpCallback: "_testcb", cache: false, timeout: 5000, success: function(data) { $("#test").append(data); }, error: function(jqXHR, textStatus, errorThrown) { alert('error ' + textStatus + " " + errorThrown); } }); });
还有其他方法可以使此工作正常进行,例如通过设置反向代理或完全使用express这样的框架来构建Web应用程序。