Как проверить успех службы или ошибку в контроллере в angularJS

0

У меня есть функция в контроллере, которая вызывает сервисную функцию. Это код для обоих.

контроллер

 $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;

У меня есть следующие проблемы с кодом.

  1. Иногда продукты не добавляются в БД, но в службе я вижу предупреждение ("Новый продукт добавлен!"); Почему это так? Почему он не собирается предупреждать ("Новый продукт Add Error!");

  2. Как проверить на успех или ошибку в контроллере вместо обслуживания?

Пожалуйста, помогите мне.

Теги:

2 ответа

0
  1. Может быть, ваш возвращаемый код статуса HTTP 200 после запроса, когда он не вставляет в базу данных. Если данные не вставлены правильно, вам нужно вернуть ошибку $http.

  2. вы можете вернуть обещание $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

});
  • 0
    Спасибо за быстрый ответ. Но я думаю, что я не возвращаю код 200. Я вставил код кода скрипта. Там я использую заявление, если не успех.
  • 0
    положить console.log(data); внутри двух функций обратного вызова и проверьте ответы.
0

$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 чтобы узнать, что он возвращает, чтобы вы могли отлаживать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню