$ http иногда возвращает код ошибки 0 и иногда работает

0

У меня есть угловой контроллер, который берет данные из формы, манипулирует данными и отправляет их на сервер через $http для сохранения

Проблема в том, что код работает отлично, то есть он возвращает функцию успеха и не работает иногда, т.е. возвращает код ошибки 0, но даже когда это происходит, данные все еще сохраняются в базе данных, даже журнал сервера показывает, что его успешный результат, почему это? Функция успеха иногда называется, а иногда вызывается ошибка. Что я делаю не так?

Угловой контроллер:

    app.controller("premiumAdvertsController",function($scope,ergastAPIservice,$routeParams,$location,$rootScope)
{
  function uploadImage(input,success) {
    console.log("yeh input hai ",input);
    if ( input.files && input.files[0] ) {
        var FR= new FileReader();
        FR.onload = function(e) {
             success(e.target.result);
        };       
        FR.readAsDataURL( input.files[0] );
    }
}
      $scope.registerPremiumAdvertisement=function()
        {
          console.log("shakil k sath check!eeersss!");
          console.log("hello");
          var count=1;
          var owner=$rootScope.currentUser.email;
        var companyName=$scope.companyName;
        var companySlogan=$scope.companySlogan;
        var companyAddress=$scope.companyAddress;
        var companyFacebookLink=$scope.companyFacebookLink;
        var companyTwitterLink=$scope.companyTwitterLink;
        var companyContactNumber=$scope.companyContactNumber;
       var companySiteLink=$scope.companySiteLink;
       var sliderText=$scope.imageText;
       var category="premiumBrand";       
        var featuredOffer1Title=$scope.featuredOffer1Title;
        var featuredoffer1Description=$scope.featuredoffer1Description;
        var featuredoffer1Expiry=$scope.featuredoffer1Expiry;

        var featuredOffer2Title=$scope.featuredOffer2Title;
        var featuredoffer2Description=$scope.featuredoffer2Description;
        var featuredoffer2Expiry=$scope.featuredoffer2Expiry;

        var featuredOffer3Title=$scope.featuredOffer3Title;
        var featuredoffer3Description=$scope.featuredoffer3Description;
        var featuredoffer3Expiry=$scope.featuredoffer3Expiry;

        var featuredOffer4Title=$scope.featuredOffer4Title;
        var featuredoffer4Description=$scope.featuredoffer4Description;
        var featuredoffer4Expiry=$scope.featuredoffer4Expiry;
console.log("hello");
        var detailedOffer1Description=$scope.detailedOffer1Description;
        var detailedOffer2Description=$scope.detailedOffer2Description;
        var detailedOffer3Description=$scope.detailedOffer3Description;
        var detailedOffer4Description=$scope.detailedOffer4Description;
        console.log("hello");


        var storeName=$scope.storeName;
        var file1=document.getElementsByClassName("companyLogo")[0];
        var file2=document.getElementsByClassName("picture2")[0];
        var file3=document.getElementsByClassName("picture3")[0];
        var file4=document.getElementsByClassName("picture4")[0];
        var file5=document.getElementsByClassName("picture5")[0];
        console.log("hello");
        //var file6=document.getElementsByClassName("picture6")[0];
        //var file7=document.getElementsByClassName("picture7")[0];
        var f1,f2,f3,f4,f5;
        var out=[f1,f2,f3,f4,f5];
        var arr=[file1,file2,file3,file4,file5]

        for (var i=0;i<arr.length;i++ )
        {

          console.log(i);
          
          if( arr[i].files[0])  
          {
            (function(ith){
              uploadImage(arr[ith],function(result){
              out[ith]=result;
              count++;
              console.log(count,"count");
              if(count==6)
              {
                console.log("count hogya six!");
                var featuredOffer1={offerTitle:featuredOffer1Title,offerDescription:featuredoffer1Description,offerExpiry:featuredoffer1Expiry};
                var featuredOffer2={offerTitle:featuredOffer2Title,offerDescription:featuredoffer2Description,offerExpiry:featuredoffer2Expiry};
                var featuredOffer3={offerTitle:featuredOffer3Title,offerDescription:featuredoffer3Description,offerExpiry:featuredoffer3Expiry};
                var featuredOffer4={offerTitle:featuredOffer4Title,offerDescription:featuredoffer4Description,offerExpiry:featuredoffer4Expiry};
                var featuredOffers=[];
                featuredOffers.push(featuredOffer1);
                featuredOffers.push(featuredOffer2);
                featuredOffers.push(featuredOffer3);
                featuredOffers.push(featuredOffer4);
                var pages=[];
                var pageCount=0;
        var offerDescriptions=[];
        var detailerOffer1={offerDescription:detailedOffer1Description,offerPicture:out[1]}
        var detailerOffer2={offerDescription:detailedOffer2Description,offerPicture:out[2]}
        var detailerOffer3={offerDescription:detailedOffer3Description,offerPicture:out[3]}
        var detailerOffer4={offerDescription:detailedOffer4Description,offerPicture:out[4]}
        offerDescriptions.push(detailerOffer1);
        offerDescriptions.push(detailerOffer2);
        offerDescriptions.push(detailerOffer3);
        offerDescriptions.push(detailerOffer4);

        var f={pageCount:pageCount,owner:owner,category:category,pages:pages,companyLogo:out[0],imageText:sliderText,companyName:companyName,companySlogan:companySlogan,companyAddress:companyAddress,companyContactNumber:companyContactNumber,companyFacebookLink:companyFacebookLink,companyTwitterLink:companyTwitterLink,companySiteLink:companySiteLink,featuredOffers:featuredOffers,offerDescriptions:offerDescriptions,premiumAdd:true};
        console.log("f bangya!");
        ergastAPIservice.saveHotBrand(f).then(function(res){
                    console.log("server pe chala gya data!");
                    if(res.success)
                    {
                      console.log("successfully got success from server !!");
                     $(".modalKaText").text("successfully uploaded");
              $("#myModal").modal();
              $location.path("/home");
                 }
                    else if(res.error)
                    {
                      console.log("got error from server!!!");
                      $(".modalKaText").text("There was some error");
              $("#myModal").modal();
              $location.reload()
                    }
                    else {
                      console.log("got nothing from server");
                    }
                },function(res){
                  res=JSON.stringify(res);
                  console.log("error found!!",res);
                })

              }
            })
            })(i);
            
          }
          else 
          {
            count++;
            console.log(count,"count");
          }

        }



      }
      
});

код для функции $ http (saveHotbrand):

ergastAPI.saveHotBrand=function(abc)
    {
      return $http({
        method:'POST',
        url:'/saveAdd',
        data:abc
      })
    }
nodejs и код экспресс для этой ссылки:

  

app.post('/saveAdd',function(req,res){
	console.log("save add request!");
  var collection=req.db.get("advertisements");
  console.log("got database")
  collection.insert(req.body,function (err,doc){
    if(err)
    {
    	console.log("sending error")
      res.send({error:true});
    }
    else {
    	console.log("sending success")
      res.send({success:true});
    }

  })
})
  • 0
    Вам нужно создать пару из этого примера.
  • 0
    я просто стараюсь быть максимально тщательным
Показать ещё 4 комментария

5 ответов

0
Лучший ответ

Поэтому для всех, кто придет сейчас, страница была в основном перенаправлена, поэтому я начал делать вызов функции контроллера через ng-click вместо ngsubmit, и он работает.

0

Согласно этой странице код ошибки 0 на самом деле является кодом успеха, это просто условие if, которое вызывает проблему. Включите проверку на 0 и она должна работать.

0

Вы отправляете форму, нажав на кнопку и обработав ее событие клика, чтобы отправить форму, всякий раз, когда вы это делаете, вам нужно возвращать false из функции onCLick.

0

Измените функцию вызова eargast на этот ergastAPIservice.saveHotBrand(f).success(function (res) {}

Тогда это будет работать только на успех.

  • 0
    это был исходный код, но документация js для $ http ясно показывает, что успех и ошибка не рекомендуются.
0

Попробуйте это в коде nodejs:

    app.post('/saveAdd',function(req,res){
    var collection=req.db.get("advertisements",function(err){
             collection.insert(req.body,function (err,doc){
             if(err)
             {   
                res.send({error:true});
             }
             else {
                 res.send({success:true});
             }

        })
    })

 })

Я столкнулся с аналогичной проблемой, которая была решена путем добавления функции обратного вызова. Вы можете увидеть этот вопрос здесь.

  • 0
    Нет, не работает!

Ещё вопросы

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