嗨,我是棱角分明并试图学习东西。
我试图从跨域获取json文件。这是我写的一段代码。现在我发现尽管JSON从服务器返回并且我得到了201状态响应。错误块被击中。
从堆栈溢出中的一个链接中我发现无法使用异步ajax调用进行错误处理。那么将数据绑定到$ scope.greeting的好方法是什么?
$http.jsonp('http://marco.factset.com/caches.json').
success(function(data) {
$scope.greeting = data;
alert($scope.greeting);
}).
error(function(data, status) {
console.log( data + " Request failed " + status);
$scope.status = status;
});
});
以下是在firebug中看到的http响应。
Response Headersview source
Cache-Control no-cache
Connection close
Content-Encoding gzip
Content-Length 12178
Content-Type application/json; charset=utf-8
Date Wed, 14 May 2014 16:31:27 GMT
Server Mongrel 1.1.5
Set-Cookie _marco4_session=BAh7CDoPc2Vzc2lvbl9pZCIlODBiOTFjMDA2MDcyM2NhYzE1MjA2NDE5NDQ0ZjdhOTgiDmFzOmNhY2hlc3sGOglsaXN0ewAiCmZsYXNoSUM6J0FjdGlvbkNvbnRyb2xsZXI6OkZsYXNoOjpGbGFzaEhhc2h7AAY6CkB1c2VkewA%3D--d4c4f3af3a2fe24cde206eaea2bd8097601c48c5; path=/; HttpOnly
Status 201
Vary Accept-Encoding
Via 1.1 marco
X-Runtime 464
Request Headersview source
Accept */*
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Authorization Basic ZHJveTphcHJpbEAxMjM=
Cache-Control max-age=0
Connection keep-alive
Cookie _marco4_session=BAh7CCIOYXM6Y2FjaGVzewY6CWxpc3R7ADoPc2Vzc2lvbl9pZCIlODBiOTFjMDA2MDcyM2NhYzE1MjA2NDE5NDQ0ZjdhOTgiCmZsYXNoSUM6J0FjdGlvbkNvbnRyb2xsZXI6OkZsYXNoOjpGbGFzaEhhc2h7AAY6CkB1c2VkewA%3D--b1fbe53b408aad4d99240aa9b9348984dd7afca4
Host marco.factset.com
Referer http://localhost:63342/qaweb3/app/index.html
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0 FirePHP/0.7.4
x-insight activate
以下是我收到的JSON摘录。
[{"cache": {"config": "/home/fds/metp/FDSadx_tp/etc/adx_tp.cfg", "updated_at": "2012-11-15T02:00:20Z", "product_developer_id": 55, "name": "adx", "secondary_engineer_id": 42, "ftok": 43, "cachetype": "tp", "primary_engineer_id": 66, "service_name": null, "id": "adx", "created_at": "2012-02-22T09:01:41Z"}}, {"cache": {"config": "/home/fds/metp/FDSadx_xstream_tp/etc/adx_tp.cfg", "updated_at": "2014-04-17T10:56:14Z", "product_developer_id": 55, "name": "adx_xstream", "secondary_engineer_id": 24, "ftok": 42, "cachetype": "tp", "primary_engineer_id": 70, "service_name": null, "id": "adx_xstream", "created_at": "2013-11-21T11:45:03Z"}}, {"cache": {"config": "/home/fds/metp/FDSamman_tp/etc/amman_tp.cfg", "updated_at": "2011-12-12T19:47:02Z", "product_developer_id": null, "name": "amman", "secondary_engineer_id": 22
编辑1:
服务器不支持jsonp,因此使用回调函数不起作用,因为json数据不是由作为参数传递的函数名包装的。有没有解决跨域http请求的工作?
function handle_data(data) {
// `data` is now the object representation of the JSON data
alert("Got data " + data );
}
var url = "http://http://marco.factset.com/caches.json?callback=handle_data";
$http.jsonp(url).
success(function(data, status, headers, config) {
alert("Success")
}).
error(function(data, status, headers, config) {
alert("Failure");
});
答案 0 :(得分:1)
所以最后我得到了这个工作,服务器没有启用JSONP,但我有权在域内安装我自己的JSONP服务,所以我向这个自定义服务发出了jsonp请求,这个服务反过来变得简单获取对同一域中的实际服务的请求,结果将转换为jsonp格式。
以下是角度控制器的摘录。
$http({method: 'JSONP', url: 'http://unixdeva10.myurl.com:9643/jsonprouter?callback=JSON_CALLBACK&key=caches.json'}).
success(function(data, status, headers, config) {
process_response(data);
}).
error(function(data, status, headers, config) {
alert("Failed");
});
答案 1 :(得分:-1)
您需要弄清楚错误块被命中的原因,解决该问题并继续使用您的成功方法。
代码201
成功(创建)