Javascript ajax setTimeout不适用于json_编码
AJAX函数Javascript ajax setTimeout不适用于json_编码,javascript,php,ajax,Javascript,Php,Ajax,AJAX函数 var stopTime = 0; var checkRequApprove = function () { $.ajax({ url: 'http://127.0.0.1/ProgVsProg/main/checkApproveReq', success:function(output){ jsn=JSON.parse(output); if(output==false){ stop
var stopTime = 0;
var checkRequApprove = function ()
{
$.ajax({
url: 'http://127.0.0.1/ProgVsProg/main/checkApproveReq',
success:function(output){
jsn=JSON.parse(output);
if(output==false){
stopTime = setTimeout(checkRequApprove, 3000);
}
else {
bootbox.dialog({
message: "Battle",
title: "Request Accepted",
buttons:
{
success: {
label: "Approve",
className: "btn-success",
callback: function() {
$.ajax({
"type" : "POST",
"url" : "finalBattleApprove",
"data" : {'username' : jsn.user_name},
success: function(data){
$('#example').html(data);
$('#loadingmessage').show();
}
});
}
},
}
}
});
}
stopTime = setTimeout(checkRequApprove,3000);
控制器
public function checkApproveReq(){
$id = $this->session->userdata('userID');
$requApprove = '1';
$check = $this->lawmodel->checkRequApprove($id,$requApprove);
foreach($check as $row){
if($row->requApprove == '1')
{
$reqID = $this->lawmodel->getID($row->requestedID);
foreach($reqID as $row){
echo json_encode(
array(
'user_name' =>$row->username,
)
);
}
}
else
echo false;
}
}
我有这个代码,其中有一个数据库的实时检查,如果条件满足..自定义对话框将弹出。
我在我的checkRequApprove
功能中遇到此问题。bootbox.dialog
将不会显示,如果控制器中的条件满足。。。
我相信我的问题是因为在echo json\u encode
的控制器中。我找不到任何解决方案。我还是ajax的新手
已编辑
自定义对话框只有在我刷新页面后才会显示。
output
是一个字符串-比较output==false
将始终生成false,因为非空字符串始终为true(不考虑edgecase“0”,在这种情况下“0”==false将生成true)
而不是
if(output==false){
...
}
应该是:
if (!jsn){ // or jsn == false if you like that better
...
}
您也应该考虑不要在控制器中返回一个简单的值,但总是要有一个适当的JSON对象,比如:
else{ // consider always using brackets, for more robustness
echo
array(
'error' => true
);
}
现在,在js中,您只需检查
if (jsn.error){
...
}
无论如何,您应该为您的json包含一个错误回调,以处理json请求中可能出现的错误。是否触发了成功回调?无法判断,因为bootbox.dialog将不会显示..当我尝试将控制器中的
json\u encode
更改为echo$id
时,对话框将显示..但我无法继续,因为我的回调:将从json\u encode
获取一个值。您不知道吗?一个简单的console.log()或断点告诉您这一点。在Ajax调用中添加一个错误处理程序。抱歉..我对我的问题做了一些编辑..因为我觉得它很奇怪。自定义对话框只有在我刷新页面后才会显示。所以它只运行一次,您希望它再次运行吗?如果希望函数再次运行,则需要调用新的超时,因为您没有运行间隔。