我尝试了一个Angular demo并且想玩jsonp并且我无法让它工作,所以我将相同的代码粘贴到jsbin中,所以我可以问你们这些错误。并注意到它有效。
在我的开发网站上再次尝试完全相同的代码。它不起作用。我可以在webkit中看到网络日志,我使用http代码200获得了有效的json。但是没有执行回调。
我最终在同一个请求上尝试了jQuery-Ajax,并且运行正常。对我来说
$(document).ready(function() {
$.getJSON('http://angularjs.org/greet.php?callback=?&name=Super%20Hero', function(data) {
console.log(data); // Works
});
});
这是我的代码的演示,不适用于localy http://jsbin.com/ojibel/edit#html,live。
编辑:
我从.html切换到.php扩展名,它开始工作了。所以它必须用apache做点什么?
答案 0 :(得分:1)
在JQUERY api doc中提到了
“但是,由于JSONP和跨域GET请求不使用XHR,在这些情况下,传递给成功回调的jqXHR和textStatus参数是未定义的。”
我在http://jsbin.com/ojibel/3/edit
修改了您的代码如果你看到我创建了一个名为getData的函数和我作为回调URL传递的相同函数,那么我就能在控制台中显示它。
JSONP的工作方式是尝试将URL添加为脚本标记,并将URL的输出视为脚本,并且该代码按原样执行。所以,如果你有回电话 xyx在输出中你会有类似
的东西XYZ(DATA_FROM_SERVER)
与
相同<script>xyz(DATA_FROM_SERVER)</script>
答案 1 :(得分:1)
当你说它“不起作用”时,你能说出你正在采取的步骤以及预期与实际结果的对比吗?
请注意,在您的示例中,您使用带有$ templateCache的$ http,并且在html文件的底部有<script type="text/ng-template" id="http-hello.html">Hello, $http!</script>
,它将使用http-hello.html
个请求的响应来填充缓存,因此如果您获取/http-hello.html,则不会向服务器发出请求,并且将使用缓存的内容调用回调。