Javascript 无法在AngularJS中发布数据
我正在构建一个小应用程序,用于从一个JSON文件获取数据并将其发布到另一个JSON文件。我使用AngularJS和ngResource以及$http服务来实现该功能 我能够使用GET方法读取数据,但POST并没有将数据发布到我的另一个JSON文件中 以下是我的控制器和服务定义:Javascript 无法在AngularJS中发布数据,javascript,html,angularjs,angularjs-directive,Javascript,Html,Angularjs,Angularjs Directive,我正在构建一个小应用程序,用于从一个JSON文件获取数据并将其发布到另一个JSON文件。我使用AngularJS和ngResource以及$http服务来实现该功能 我能够使用GET方法读取数据,但POST并没有将数据发布到我的另一个JSON文件中 以下是我的控制器和服务定义: 'use strict'; /* Controllers */ var boookbAppControllers = angular.module('boookbAppControllers', []); booo
'use strict';
/* Controllers */
var boookbAppControllers = angular.module('boookbAppControllers', []);
boookbAppControllers.controller('boookbAppCtrl', ['$scope','$http','Book',
function($scope,$http,Book) {
$scope.way=["Normal","$http","RestFul"]
$http.get('data/books.json').success(function(data) {
$scope.b1 = data;
$scope.addBook1=function(){
$http.post('data/newbooks.json',{ "catalogRefIds" : $scope.books[0].title, "productId" : $scope.books[0].author}).then(function(response,status){
$scope.a=status;
alert($scope.a);
});
}
$scope.b2 = Book.query();
$scope.newBookName="";
$scope.userBook="";
$scope.userBookAuthor="";
$scope.newBookAuthor="";
$scope.bookData={};
$scope.addBook=function(){
$scope.userBook=$scope.newBookName;
$scope.userBookAuthor=$scope.newBookAuthor;
Book.add({},$scope.bookData);
}
});
}]);
'use strict';
/* Services */
var boookbAppServices = angular.module('boookbAppServices', ['ngResource']);
boookbAppServices.factory('Book', ['$resource',
function($resource){
return $resource('data/:bookId.json', {}, {
query: {method:'GET', params:{bookId:'books'}, isArray:true},
add: {method:'POST',params:{bookId:'books'},isArray: true}
});
}]);
我检查了POST数据的跟踪,但没有发送任何数据。我不知道您试图通过发布到.json文件来做什么。也就是说,假设您实际上在处理POST请求服务器端,并且没有看到任何数据,那么这很可能就是问题所在: 例如,Angular发布数据的方式与jQuery不同——它以application/json而不是application/x-www-form-urlencoded的形式发送数据。因此,以PHP为例,如果您选中$_POST['key'],它将找不到它。您可以选择在服务器端处理it:
$_JSON = file_get_contents("php://input");
$_JSON = json_decode($_JSON, TRUE);
echo $_JSON['key'];
或者,您可以将其转换为客户端的数据格式:
boookbAppControllers.config(function($httpProvider) {
$httpProvider.defaults.headers.post = {'Content-Type': 'application/x-www-form-urlencoded'};
$httpProvider.defaults.transformRequest = function(data) {
if (data === undefined) return data;
var clonedData = clone(data);
for (var property in clonedData)
//you could do this with hasOwnProperty probably,
//but this works unless you prepend variable keys
//with $
if (property.substr(0, 1) == '$')
delete clonedData[property];
return $.param(clonedData);
};
});
请看一下$http.post语法:我们需要用封装实际数据的关键字data传递数据
$http.post('data/newbooks.json', data : { "catalogRefIds" : $scope.books[0].title, "productId" : $scope.books[0].author}).then(function(response,status){
$scope.a=status;
alert($scope.a);
});
发布JSON数据时,使用文本/普通的内容类型,在angular 1.5.11中进行了尝试和测试
$http({
method : 'POST',
url : 'http://example.com',
headers: {
'Content-Type': 'text/plain',
},
data : JSON.stringify({data})
})
您不能简单地发布到文件。您需要某种服务器端脚本来处理这个问题。您的后端设置是什么样子的?在这种情况下,您可能: