我正在尝试使用$ 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); });
感谢。
答案 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");
注意最后一个参数。