^ Не работает функция
По какой-то причине скрипт не запускается или возвращает ответ. Консоль - это ничто. Попытка получить ответ на сайте yandex.transtale ( http://Trying%20to%20get%20an%20answer%20to%20yandex.transtale%20site%20(https://tech.yandex.com/translate/doc/dg/reference/translate-docpage/) /). Код: http://jsbin.com/jolijep/edit?html,js,console,output
var app = angular.module('jsbin', []);
app.controller('DemoCtrl', function($scope, $http) {
var url = "https://translate.yandex.net/api/v1.5/tr.json/translate";
keyAPI = "trnsl.1.1.20130922T110455Z.4a9208e68c61a760.f819c1db302ba637c2bea1befa4db9f784e9fbb8";
var vm = this;
$scope.SendData = function() {
// тут данные
var textApi = 'Hello';
var langApi = 'en-ru';
var text1 = 'Hello';
var data = "key=" + keyAPI + "&text=" + textApi + "&lang=" + langApi;
$http.post(url, data)
.success(function(data, status, headers, config) {
vm.data = response.data;
$scope.PostDataResponse = data;
console.log(data);
})
.error(function(data, status, header, config) {
$scope.ResponseDetails = "Data: " + data +
"<hr />status: " + status +
"<hr />headers: " + header +
"<hr />config: " + config;
});
};
});
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Angular JS</title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<script src="weather.js"></script>
</head>
<body ng-app="jsbin">
<div ng-controller="DemoCtrl as vm">
<script src="weather.js"></script>
<button ng-click="SendData()">Send</button>
<br>Data: {{PostDataResponse}}
<br>{{vm.data}} {{vm.PostDataResponse}} Data: {{scope.PostDataResponse}} {{vm.data}}
</div>
</body>
</html>
1 ответ
Если вы посмотрите на ссылку API перевода Яндекса, он попросил вас передать информацию для вашего запроса в виде параметров (параметр). Эти параметры должны быть добавлены к URL запроса.
Другими способами получения информации из API с помощью запроса POST является передача информации в форме тела этого запроса.
Но API перевода Яндекса с запросом POST запрашивает информацию, прикрепленную к URL.
var data = "key="+keyAPI+"&text="+textApi+"&lang="+langApi
эта переменная данных должна добавляться к переменной url при выполнении запроса POST к API. Но,
$http.post(url, data)
Вызов метода $http делает данные интерпретируемыми как тело запроса post вместо добавления переменной data к url во время вызова.
Гораздо более чистая и правильная реализация AngularJS для $http API заключалась бы в том, чтобы поместить все параметры в объект, где ключи - это тип параметра, а значения - значения параметров.
var params = {
key: keyAPI,
text:textApi,
lang:langApi
}
Теперь в объекте params вы храните всю информацию, которую хотели передать при выполнении запроса.
Во-вторых, вам нужно изменить запрос $http, чтобы он знал, какие параметры должны быть добавлены к URL-адресу. Я использую более базовый метод $http вместо метода $http.post, я четко укажу, каким должен быть базовый URL, тип метода для HTTP-запроса и, наконец, параметры, которые должны передаваться вместе с запросом к API.
$http({
url: url,
method: 'POST',
params: params
})
.success(function(data,headers,status,config){
$scope.PostDataResponse = data;
vm.data = data;
console.log(data);
})
.error(function(data,headers,status,config){
$scope.ResponseDetails = "Data: " + data +
"<hr />status: " + status +
"<hr />headers: " + header +
"<hr />config: " + config;
});
Другой ошибкой в вашем коде была инициализация $scope.PostDataResponse
$scope.PostDataResponse = response.data; //You are not getting any argument named response by the success function call
Правильный способ сделать это будет $scope.PostDataResponse = data;
Теперь, если вы запустите код с модификацией, он должен работать довольно хорошо.
Если все сделано правильно, то в консоли разработчика вы найдете объект, зарегистрированный после успешного выполнения запроса.
На вашей веб-странице вы также увидите тот же объект.