当请求来自浏览器或PHP时,RESTful API会返回数据,但不会来自JavaScript。为什么?

时间:2011-05-01 20:33:50

标签: php jquery ajax json

我正在尝试使用$ jQuery.get()通过GET请求调用(私有)RESTful Web服务。但是当我这样做时,我没有收到任何响应数据(虽然我确实收到了200 OK响应代码!)。

当我从PHP(file_get_contents())进行完全相同的调用时,或者只是将GET URL粘贴到我的浏览器窗口时,我收到了(JSON)响应就好了。

使用Firebug,我可以看到当我从jQuery发出请求时我发送的请求标头之间没有区别,当我将URL粘贴到浏览器中时。唯一的区别是jQuery添加了“Referer”和“Origin”标题 - 然而,我使用Firefox的ModifyHeaders扩展强制将这两个标题添加到我的直接浏览器请求中,我仍然得到了数据,所以该服务无法根据Referer / Origin进行过滤。

所以基本上我想知道如果我可以做出两个看似相同的请求,但是当它通过jQuery时没有得到响应,那到底是怎么回事。是否有一些“隐藏”标题或参数,我没有看到服务器可以用来确定请求是通过JavaScript发送的?

我的代码就像$.get("http://example.com/json.php?q=sometext", function(response) { alert(response); });

一样简单

感谢。

2 个答案:

答案 0 :(得分:1)

您是否有可能通过尝试发送跨域AJAX请求来违反same origin policy?如果,不确保服务器将正确的Content-Type标头设置为application/json,以便jQuery在成功回调中自动为您提供准备使用的已解析对象。还可以尝试将相对URL传递给$.get函数:

$.get("/json.php?q=sometext", function(response) { 
    alert(response); 
});

答案 1 :(得分:0)

试试这个:

$.get("http://example.com/json.php?q=sometext", 
      function(response) { alert(response); },
      "json");

注意最后一个参数。