2012-11-11 47 views
0

我正在端口8081上运行http服务器,并试图使用getJSON jQuery函数获取JSON。但我总是与跨域(CORS)问题运行。我正在考虑使用JSONP,但我不知道我是如何在node.js脚本中实现它的。需要克服跨域问题的帮助,使用服务器端的节点和客户端的JS使用

headers["Access-Control-Allow-Origin"] = "*"; 
    headers["Access-Control-Allow-Methods"] = "POST, GET, PUT, DELETE, OPTIONS"; 
    headers["Access-Control-Allow-Credentials"] = false; 
    headers["Access-Control-Allow-Headers"] = "Content-Type,X-Requested-With, X-PINGOTHER"; 
    headers["Access-Control-Max-Age"] = 86400; 
    response.writeHead(200, headers); 
    var objToJson = {"response":res }; 
    response.write(JSON.stringify(objToJson)); 

这是我的客户端代码。

jQuery.getJSON('http://localhost:8081', function(data) { 
    console.log(data); 
    }); 
+1

什么是确切的错误信息?在使用CORS时,我发现Chrome的控制台有最有帮助的错误日志 – guillaume

+0

这是错误消息: - XMLHttpRequest无法加载http:// localhost:8081 /。 Access-Control-Allow-Origin不允许源http:// localhost:8080。 – user1386101

回答

0

不知道你做错了什么,但我复制你的代码,填补了空白,它的工作对我来说(在Firefox 16和Chrome 24)。

这里是我的CORS demo

  • app.js

    var http = require('http'); 
    
    http.createServer(function(request, response) { 
        var headers = {}; 
        headers["Access-Control-Allow-Origin"] = "*"; 
        headers["Access-Control-Allow-Methods"] = "POST, GET, PUT, DELETE, OPTIONS"; 
        headers["Access-Control-Allow-Credentials"] = false; 
        headers["Access-Control-Allow-Headers"] = "Content-Type,X-Requested-With, X-PINGOTHER"; 
        headers["Access-Control-Max-Age"] = 86400; 
    
        response.writeHead(200, headers); 
        var objToJson = {"response": "hello cors" }; 
        response.write(JSON.stringify(objToJson)); 
        response.end() 
    }).listen(8081) 
    
  • 的index.html

    <!DOCTYPE html> 
    <html> 
    <head> 
    <meta charset=utf-8 /> 
    <title>CORS demo</title> 
    </head> 
    <body> 
        view results in the console 
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.js"></script> 
        <script type=text/javascript> 
        jQuery.getJSON('http://localhost:8081', function(data) { 
         console.log(data); 
        }); 
        </script> 
    </body> 
    </html> 
    
1

你能适应这个PHP脚本,逻辑是很简单。 积分:https://stackoverflow.com/a/1678243

if (array_key_exists('callback', $_GET)) { 
    // JSONP String 
    header('Content-Type: text/javascript; charset=utf8'); 
    header('Access-Control-Allow-Origin: *'); 
    header('Access-Control-Max-Age: 0'); 
    header('Access-Control-Allow-Methods: GET'); 

    $callback = $_GET['callback']; 
    echo $callback . '(' . $data . ');'; 
} else { 
    // JSON String 
    header('Content-Type: application/json; charset=utf8'); 
    echo $data; 
} 
相关问题