У меня есть функция в контроллере, которая вызывает сервисную функцию. Это код для обоих.
контроллер
$scope.AddNewProduct = function (NewProduct) {
var newProduct = {};
newProduct.ProductID = NewProduct.id;
newProduct.ProductName = NewProduct.name;
newProduct.ProductImagePath = NewProduct.imagepath;
newProduct.SubCategoryID = NewProduct.subcategory.id;
newProduct.SubCategoryName = NewProduct.subcategory.name;
newProduct.BrandID = NewProduct.brand.id;
newProduct.BrandName = NewProduct.brand.name;
newProduct.Variants = [];
ProductService.AddNewProduct(newProduct);
$scope.NewProduct = {};
$scope.NewProduct.id = parseInt($scope.Products[0].ProductID) + 1;
};
обслуживание
ProductService.AddNewProduct = function(NewProduct) {
productList.unshift(NewProduct);
var req = {
url: "cgi-bin/AddNewProduct.pl",
method: 'GET',
params: {ProductID: NewProduct.ProductID, ProductName: NewProduct.ProductName, ProductImagePath: NewProduct.ProductImagePath, BrandID: NewProduct.BrandID, SubCategoryID: NewProduct.SubCategoryID}
//params: { NewProduct: ProductData }
};
$http(req).success(function()
{
alert ('New Product Added!');
})
.error(function()
{
alert ('New Product Add Error!');
});
}
Perl Script для добавления продукта.
#!/usr/bin/perl
use cPanelUserConfig;
use strict;
use warnings;
use DBI;
use CGI::Carp qw(warningsToBrowser fatalsToBrowser);
use CGI;
use CGI::Cookie;
use CGI::Session qw();
use JSON;
print "Content-Type: text/html\n\n";
my $CFG = do "config.pl";
my $db_handle = DBI->connect ("DBI:mysql:$CFG->{database}", $CFG->{user}, $CFG->{password} ) or die "Couldn't connect to database: $DBI::errstr\n";
my $cgi = CGI->new();
#my $DecodedData = decode_json($cgi->param("NewProduct"));
my $product_id = $cgi->param('ProductID');
my $product_name = $cgi->param('ProductName');
my $product_description = 'DESC';
my $image_path = $cgi->param('ProductImagePath');
my $brand_id = $cgi->param('BrandID');
my $subcatty_id = $cgi->param('SubCategoryID');
my $sql_query = "insert into table_products values ($product_id, '$product_name', '$product_description', '$image_path', '$brand_id', 1)";
my $statement = $db_handle->prepare ($sql_query) or die "Couldn't prepare query '$sql_query': $DBI::errstr\n";
$statement->execute() or die "SQL Error: $DBI::errstr\n";
$sql_query = "insert into table_product_categories values ($product_id, '$subcatty_id')";
my $statement = $db_handle->prepare ($sql_query) or die "Couldn't prepare query '$sql_query': $DBI::errstr\n";
$statement->execute() or die "SQL Error: $DBI::errstr\n";
$db_handle->disconnect;
У меня есть следующие проблемы с кодом.
Иногда продукты не добавляются в БД, но в службе я вижу предупреждение ("Новый продукт добавлен!"); Почему это так? Почему он не собирается предупреждать ("Новый продукт Add Error!");
Как проверить на успех или ошибку в контроллере вместо обслуживания?
Пожалуйста, помогите мне.
Может быть, ваш возвращаемый код статуса HTTP 200
после запроса, когда он не вставляет в базу данных. Если данные не вставлены правильно, вам нужно вернуть ошибку $http
.
вы можете вернуть обещание $http
от службы, как показано ниже,
ProductService.AddNewProduct = function(NewProduct) {
productList.unshift(NewProduct);
var req = {
url: "cgi-bin/AddNewProduct.pl",
method: 'GET',
params: {ProductID: NewProduct.ProductID, ProductName: NewProduct.ProductName, ProductImagePath: NewProduct.ProductImagePath, BrandID: NewProduct.BrandID, SubCategoryID: NewProduct.SubCategoryID}
//params: { NewProduct: ProductData }
};
return $http(req);
}
в контроллере,
ProductService.AddNewProduct(newProduct).then(function(data) {
// success
}, function(data) {
// error
});
$http
может использовать данные ответа:
// Simple GET request example :
$http.get('/someUrl').
success(function(data, status, headers, config) {
// this callback will be called asynchronously
// when the response is available
}).
error(function(data, status, headers, config) {
// called asynchronously if an error occurs
// or server returns response with an error status.
});
Сделайте свой API cgi-bin/AddNewProduct.pl
для возврата данных о состоянии успеха/ошибки/состояния. console.log
чтобы узнать, что он возвращает, чтобы вы могли отлаживать.
console.log(data);
внутри двух функций обратного вызова и проверьте ответы.