У меня есть угловой контроллер, который берет данные из формы, манипулирует данными и отправляет их на сервер через $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
})
}
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});
}
})
})
Поэтому для всех, кто придет сейчас, страница была в основном перенаправлена, поэтому я начал делать вызов функции контроллера через ng-click вместо ngsubmit, и он работает.
Согласно этой странице код ошибки 0 на самом деле является кодом успеха, это просто условие if, которое вызывает проблему. Включите проверку на 0
и она должна работать.
Вы отправляете форму, нажав на кнопку и обработав ее событие клика, чтобы отправить форму, всякий раз, когда вы это делаете, вам нужно возвращать false из функции onCLick.
Измените функцию вызова eargast на этот ergastAPIservice.saveHotBrand(f).success(function (res) {}
Тогда это будет работать только на успех.
Попробуйте это в коде 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});
}
})
})
})
Я столкнулся с аналогичной проблемой, которая была решена путем добавления функции обратного вызова. Вы можете увидеть этот вопрос здесь.