2013-08-04 79 views
1

我正在使用ajax和节点js第一次。当我使用客户端从节点js获取响应时,它将进入错误功能。另一方面,当我直接从浏览器调用url时,我从服务器得到正确的响应。这表明客户端ajax请求有问题。没有得到来自ajax的响应,进入错误功能

这是我的客户端代码:

function fetch() { 
    $.ajax({ 
    type: 'POST', 
    url: "http://127.0.0.1:8888", 
    data: {data : 'India'}, 
    dataType: 'json', 
    success: function() { 
     alert("hi"); 
     //var ret = jQuery.parseJSON(data); 
     //$('#q').html(ret.msg); 
    }, 
    error: function (jqXHR, textStatus, error) { 
     console.log('Error: ' + error.message); 

     alert("ERROR"); 
    } 

}); 

这是服务器的Node.js代码(的一部分)。 console.log msg获取正确的值。

http.createServer(function(req, response) { 
    console.log("Request received"); 
    response.writeHeader(200, {"Content-Type": "application/json"}); 
    req.on('data', function (chunk) { 
     console.log(chunk.toString('utf8')); 
     console.log(result[0].name); 

    });  
    response.end(JSON.stringify({data:result})); 
}).listen(8888); 

服务器中的所有console.log文件都会得到正确的值。这意味着当有一个jax请求时,响应没有回到原点,但直接写127.0.0.1:8888时,我得到正确的响应。

在控制台上的信息是:

XMLHttpRequest cannot load http://127.0.0.1:8888/. Origin null is not allowed by Access-Control-Allow-Origin. 

请人帮忙解决这个问题了。我一直在这一天。

编辑:网络选项卡的屏幕截图。正如你可以看到服务器获取请求,但客户端没有得到响应。即使在写入'Access-Control-Allow-Origin'之后,也会完成:'*'。 enter image description here

+0

您在* browser *控制台中获得输出吗?听起来像是一个跨域问题。 – Dave

+0

http://stackoverflow.com/a/9523871/1180785 – Dave

+0

@Dave:我看到这条消息(编辑后),然后弹出警告消息。然后页面自动重新加载。 –

回答

2

这是Same Origin Policy。您需要提供通过HTTP托管JavaScript的HTML文档(并且,除非您使用CORS,与您使用Ajax请求的资源来自相同的主机名和端口)。

+0

我在服务器中包含这一行(response.writeHeader(“Access-Control-Allow-Origin”,“*”);),并且也从文件到http,仍然错误在那里,页面重新加载。 –

+0

令人惊讶的是,我在document.ready函数中添加了ajax,它工作:)。谢谢。 –