angularjs jsonp不适用于localy

时间:2012-07-04 09:43:41

标签: jquery jsonp angularjs

我尝试了一个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做点什么?

2 个答案:

答案 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,则不会向服务器发出请求,并且将使用缓存的内容调用回调。