Здравствуйте, у меня возникла проблема с этим кодом, он зависает в браузере пользователя, что не очень хорошо с точки зрения конечного пользователя …, но переключение асинхронного режима в значение true возвращает неопределенное значение, поскольку сервер не находится в состоянии готовности для возврата responseText .. wi ld Мне действительно нравится, что кто-то может дать мне представление о том, как восстановить этот код. потому что он выполняется в html ng-show @ the end конца
контроллер:
$scope.votecheck = function(item,emailid){
var email = emailid;
if( typeof item !== 'undefined')
{
var jsonData = $.ajax({
type: "GET",
url: 'ajax/voters.php?id='+item.ID+'&email='+email,
dataType: 'text',
async: false
}).responseText;
if(jsonData === "CanVote"){
return true;
}
else{
return false;
} //return "canvote";
}
}
HTML:
<div class="row text-center">
<div class="col-md-10 col-md-offset-1" ng-show="!votecheck(item,me.email)">
<p class="contest-text voters"><a class="btn btn-info btn-block img-rounded" ng-disabled="true"><b>Thanks For Voting</b></a> </p>
</div>
<div class="col-md-10 col-md-offset-1" ng-show="votecheck(item,me.email)">
<p class="contest-text voters"><a class="btn btn-primary btn-block img-rounded" ng-click="upVote(item,me.email);"><b> VOTE</b></a> </p>
</div>
PHP:
<?php
include('../include/connect.php');
$id = $_GET['id'];
$emailid = $_GET['email'];
$query="select * from voters where votedid='$id' and votersemail ='$emailid'";
$result = $mysqli->query($query) or die($mysqli->error.__LINE__);
$rowcount = $result->num_rows;
if($rowcount === 0)
{
echo "CanVote";
}
else{
echo "cantvote";
}
?>
спасибо Гайз
Вы комбинируете jquery и угловой? Angular по своей природе асинхронный, и простой $ http.get с обещанием может решить эту проблему.
your parameters should be passed here.
var url = 'ajax/voters.php?id='+item.ID+'&email='+email;
$http.get('url')
.success(function(data)
{
// do your operarion here;
})
.error(function(data){
//do what ever u want on error.
});
Надеюсь это поможет.
Прежде всего, вы должны использовать $http
оказание услуг (https://docs.angularjs.org/api/ng/service/$ http) а не $.ajax
,
Если я понял, что вы пытаетесь сделать, вы не должны показывать ссылку «голосовать», пока не убедитесь, что текущий пользователь может голосовать. Это можно сделать следующим образом:
// TODO : fill canVote object with your item list,
// I guess you're using ng-repeat, and have an array of items.
// This object will be used to determine if the user can vote or not.
// Key : item ; value : boolean
$scope.canVote = {
item1: false
};
$scope.votecheck = function(item,emailid){
var email = emailid;
if( typeof item !== 'undefined')
{
$http.get('ajax/voters.php?id='+item.ID+'&email='+email).then(
function cb_success(response) {
$scope.items[item] = response.data === "CanVote";
}, function cb_failure(response) {
console.error(response);
});
}
}
angular.forEach($scope.canVote, function (status, item) {
$scope.votecheck(item, $scope.me.email);
});
Вот как вы должны делать с вашим HTML:
<div class="row text-center">
<div class="col-md-10 col-md-offset-1" ng-show="canVote[item]">
<p class="contest-text voters"><a class="btn btn-info btn-block img-rounded" ng-disabled="true"><b>Thanks For Voting</b></a> </p>
</div>
<div class="col-md-10 col-md-offset-1" ng-show="canVote[item]">
<p class="contest-text voters"><a class="btn btn-primary btn-block img-rounded" ng-click="upVote(item,me.email);"><b> VOTE</b></a> </p>
</div>
Так как вы не предоставили JSFiddle (w / e), я не смог протестировать его. Дайте мне знать, если у вас есть какие-то проблемы.