Форум программистов, компьютерный форум, киберфорум
Наши страницы
JavaScript: Angular 2, AngularJS
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
_Elena
1 / 1 / 4
Регистрация: 03.09.2014
Сообщений: 10
1

$http С некоторых url запрос не проходит

05.11.2014, 21:27. Просмотров 1335. Ответов 6
Метки нет (Все метки)

Я пытаюсь получить запрос с удаленного сервера.

С некоторых url все работает нормально. Например

app.js
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
var app = angular.module('app', ['app.angularGit']); 
 
app.controller('MainController', function($scope, AngularGit) {
    var param = {category: 'commits', sha: '0c19482d033f592fb9f341187c0a5d2e313e79cc'}
    $scope.benefit = AngularGit.get(param)
    console.log(AngularGit.get(param))
});
 
angular.module ('app.angularGit', ['ngResource'])
    .factory('AngularGit', function($resource) {
        return $resource('https://api.github.com/repos/angular/angular.js/:category/:sha')    
        //return $resource('https://routingnumbers.herokuapp.com/api/data.json?rn=1')    
    })
html.js
Javascript
1
2
3
4
5
6
7
8
9
10
<html ng-app="app">
    <body>
        <div ng-controller="MainController">
        {{benefit}}  
        </div>
        <script src="http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.1/angular.min.js"></script>
        <script src="http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.1/angular-resource.min.js"></script>
        <script type="text/javascript" src="app.js"></script>
    </body>
</html>
но если изменить url например на https://routingnumbers.herokuapp.com/api/data.json?rn=1
в консоле появляется надпись

HTML5
1
No 'Access-Control-Allow-Origin' header is present on the requested resource.
если использовать jsonp - то же самое, с некоторых url все работает нормально
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 <script src="http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.2/angular.min.js"></script>
    <script>
    var countryApp = angular.module('countryApp', []);  
    countryApp.controller('CountryCtrl', function ($scope, $http){  
        var url = 'https://api.github.com/repos/angular/angular.js/commits/0c19482d033f592fb9f341187c0a5d2e313e79cc?callback=JSON_CALLBACK';  
        $http.jsonp(url)
            .success(function(data) {  
                $scope.blog = data;
                $scope.test = 'Test';                
            })
            .error(function (data, status, headers, config) {
                alert("Dang It!");
            }); 
    });    
    </script>
  </head>   
  <body ng-app="countryApp">  
    <div ng-controller="CountryCtrl">
    {{test}}<br/>  
    </div>
  </body>
но если изменить url например на https://routingnumbers.herokuapp.com/api/data.json?rn=1
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 <script src="http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.2/angular.min.js"></script>
    <script>
    var countryApp = angular.module('countryApp', []);  
    countryApp.controller('CountryCtrl', function ($scope, $http){  
        //var url = 'https://api.github.com/repos/angular/angular.js/commits/0c19482d033f592fb9f341187c0a5d2e313e79cc?callback=JSON_CALLBACK';  
        var url = 'https://routingnumbers.herokuapp.com/api/data.json?rn=1&callback=JSON_CALLBACK';  
        $http.jsonp(url)
            .success(function(data) {  
                $scope.blog = data;
                $scope.test = 'Test';                
            })
            .error(function (data, status, headers, config) {
                alert("Dang It!");
            }); 
    });    
    </script>
  </head>   
  <body ng-app="countryApp">  
    <div ng-controller="CountryCtrl">
    {{test}}<br/>  
    </div>
  </body>
то в chrom dev Network JSON появляется но без префикса angular.callbacks._0({
Javascript
1
{"rn": "1?callback=angular.callbacks._0", "message": "Routing numbers are 9 digits", "code": 400}

Может быть поможет настройка через CORS?
Я пытаюсь настроить через $httpProvider но без особого успеха.
Javascript
1
2
3
//countryApp.config(function($httpProvider){
    //    $httpProvider.defaults.headers.common['Access-Control-Allow-Origin'];
    //});
Добавлено через 17 минут
У меня, как новичка нет возможности редактировать

Я использовала два парамерта в запросе
не валидный https://routingnumbers.herokuapp.com/api/data.json?rn=1
валидный https://routingnumbers.herokuapp.com/api/data.json?rn=071000013

не в том не в другом случае не работает и не получаем ответ
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2014, 21:27
Ответы с готовыми решениями:

Почему дублируется $http запрос ?
Всем привет! Вот код catalogControllers.controller('Catalog', ; ...

Запрос через $http на внешний сервер
Доброго времени суток, друзья. И так: Исходные данные: На комне запущен...

$http.get запрос и вывод полученных данных в директиву
Добрый день, Вопрос кажется не сложный, но разобраться на могу. делаю get...

Простой сервлет HTTP Status 405 - HTTP method GET is not supported by this URL
Здравствуйте,начал изучение сервлетов.Делал все последовательно как в примере...

HTTP запрос через Apache HTTP Client ничего не возвращает
У меня есть один сайт. Простой сайт на php. И есть второй сайт, где...

6
whiteapps
408 / 373 / 220
Регистрация: 18.07.2014
Сообщений: 1,258
05.11.2014, 21:36 2
_Elena, CORS настраивается на сервере
не нужно пытаться прописать Access-Control-Allow-Origin на клиенте

когда нет доступа к серверу и невозможно прописать нужные хедеры, используйте jsonp

если вам приходит ответ с кодом 400
JSON
1
{"rn": "1?callback=angular.callbacks._0", "message": "Routing numbers are 9 digits", "code": 400}
это как правило означает некорректный запрос
т.е. тут проблема скорее всего не в доступе, а в том что запрос в принципе не верно сформирован для этого API

а если использовать вашу ссылку с валидным параметром, то возвращается ответ

JSON
1
{"new_routing_number": "000000000", "customer_name": "JPMORGAN CHASE BANK, NA", "institution_status_code": "1", "city": "BELLEVILLE", "code": 200, "office_code": "O", "routing_number": "071000013", "zip": "48111", "record_type_code": "1", "address": "9000 HAGGERTY- MI 1-8205", "data_view_code": "1", "state": "MI", "rn": "071000013", "telephone": "800-677-7477", "change_date": "012111", "message": "OK"}
он вам тоже не по нраву?
0
_Elena
1 / 1 / 4
Регистрация: 03.09.2014
Сообщений: 10
05.11.2014, 22:13  [ТС] 3
Как получить доступ в этому ответу, который мы видем в Network?
мы не получаем success

Javascript
1
2
3
$http.jsonp(url)
            .success(function(data) {  
                $scope.blog = data;
Я использовала JSONP (посмотрите на пример 2)

1. он возвращает ошибку

Uncaught SyntaxError: Unexpected token : routingnumbers.herokuapp.com/api/data.json?rn=071000013&callback=angular.callbacks._0:1

2. network для https://routingnumbers.herokuapp.com...=JSON_CALLBACK
возвращает JSON без angular префикса

3. в ошибке возвращается: data - undefined; status -0;
.error(function (data, status, headers, config) {
alert("Dang It!");
console.log(data);
console.log(status);
console.log(headers);
console.log(config);
});


Javascript
1
2
3
4
undefined Example_25_url_Get.html:24
0 Example_25_url_Get.html:25
function (c){a||(a=jc(b));return c?a[v(c)]||null:a} Example_25_url_Get.html:26
Object {transformRequest: Array[1], transformResponse: Array[1], method: "JSONP", url: "https://routingnumbers.herokuapp.com/api/data.json?rn=071000013&callback=JSON_CALLBACK", headers: Object}headers: ObjectAccept: "application/json, text/plain, */*"__proto__: Objectmethod: "JSONP"transformRequest: Array[1]0: function (a){return X(a)&&"[object File]"!==Ya.apply(a)?oa(a):a}length: 1__proto__: Array[0]transformResponse: Array[1]0: function (d){B(d)&&(d=d.replace(c,""),b.test(d)&&a.test(d)&&(d=Tb(d)));return d}length: 1__proto__: Array[0]url: "https://routingnumbers.herokuapp.com/api/data.json?rn=071000013&callback=JSON_CALLBACK"__proto__: Object
0
whiteapps
408 / 373 / 220
Регистрация: 18.07.2014
Сообщений: 1,258
06.11.2014, 10:18 4
_Elena, вы понимаете что сервер должен поддерживать jsonp, и сам оборачивать json ответ в ф-цию которая передана параметром callback?
ваш сервер поддерживает jsonp?
0
_Elena
1 / 1 / 4
Регистрация: 03.09.2014
Сообщений: 10
06.11.2014, 19:11  [ТС] 5
Переформлирую вопрос.

Как работать с запросом, который скорее всего не поддерживает JSONP (как было показано на примере 2), но дает ответ с правильным JSON без оберкти angular.

Доступа с энд пойнт нет. Я могу работать только на клиентской стороне.


Как получить доступ в этому ответу, который мы видем в Network?
0
whiteapps
408 / 373 / 220
Регистрация: 18.07.2014
Сообщений: 1,258
07.11.2014, 12:32 6
_Elena,
именно в этом и заключается смысл кроссдоменной политики безопасности
если бы существовал способ обойти ее без позволения сервера, то в ней просто не было бы смысла
0
Qwertiy
821 / 629 / 100
Регистрация: 20.08.2013
Сообщений: 2,524
07.11.2014, 13:53 7
Можно использовать свой прокси для таких обращений. Т. е. запрос посылается на твой сервер, там пересылается на нужный тебе, а результат прокидывается обратно.
0
07.11.2014, 13:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2014, 13:53

Даны 2 запроса. Нужно Если 1 запрос получает результат (проходит) True то выполнить 2 запрос
День добрый. Подскажите как реализовать несложное условие. Даны 2 запроса....

Запрос через http - HTTP Error 400
Добрый день Есть запрос, который хотим отправлять через http ВЫБРАТЬ...

Как в Yii 2 изменить URl с http://localhost/index.php?r=site%2Findex на http://localhost/index ?
Очень нужно нормально розставить пути ,делал по видео выдало ошибку.На каждой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru