各位大牛,我发现个问题,php中echo和exit都写的时候,echo无效了

时间:2022-03-06 16:06:22
这个是我php的代码
        if(strtolower($vdcode)!=$svali || $svali=='') {
           ResetVdValue();
echo "验证码不正确";
            exit();
        };

这个是我ajax的代码
function add_ajaxmessage(){
//这里代码太多,省略了
$.ajax({
type: "POST",
url: "ask.php", 
data: dataString, 
success: function(data) {
//alert(data); //用这种方式的时候,echo的值可以正常弹出(弹窗形式)
$('#ok').html(data); //用这种方式的时候,echo的内容就不会返回到id='ok'的div里,如果吧exit();删除了,div就可以接收到echo的值,但是验证码输错的时候,代码却会继续往下执行
}
});
return false;
}


该怎么解决这样的问题啊,大半夜的在线等,急急急

19 个解决方案

#1


exit("验证码不正确");

#2


引用 1 楼 qq_34494805 的回复:
exit("验证码不正确");


老哥 还是不行,ajax接收不到返回的值啊
alert(data);可以接到
$('#ok').html(data);就接不到了
问题出在哪啊

#3


要返回就不能用exit吧,

#4


引用 3 楼 qq_34494805 的回复:
要返回就不能用exit吧,

那该怎么写,让echo的值返回到div中之后再终止,除了exit还有别的终止代码吗

#5


alert(data); //这样可以
$('#ok').html(data); //这样就可以

不可能前一句有值,后一句就没了

#6


引用 5 楼 xuzuning 的回复:
alert(data); //这样可以
$('#ok').html(data); //这样就可以

不可能前一句有值,后一句就没了

可是$('#ok').html(data);真不不能返回信息啊,我把exit删掉之后就能返回,加上exit就不能返回,而且php中的另一个echo "执行成功";就可以(这个没有exit终止),echo "验证码不正确"; exit();这就不行了,所以我很奇怪,按理说应该先执行echo后再exit的。怪就怪在这里。
偏偏alert(data);就正常。

#7


alert(data); 
$('#ok').html(data);
这两个语句同时执行。
看看结果。

#8


引用 7 楼 u014567183 的回复:
alert(data); 
$('#ok').html(data);
这两个语句同时执行。
看看结果。

同时执行,还是只弹窗有效,div不接收应有的值

#9


弹窗有值吗?有值的话说明echo 有效了。剩下的跟php没关系了。

#10


data有值么,console.log(data)出来看看

#11


引用 9 楼 u014567183 的回复:
弹窗有值吗?有值的话说明echo 有效了。剩下的跟php没关系了。


弹窗有值,这么说问题出在ajax还是别的js里面?

#12


引用 10 楼 Just_cl 的回复:
data有值么,console.log(data)出来看看


console可以看到正常的值,这个到底什么原因啊。愁死人了。偏偏页面打印不出来相应的值

#13


把输出信息换成英文看看

#14


引用 13 楼 xuzuning 的回复:
把输出信息换成英文看看


换成英文或数字  都不行

#15


@xuzuning 
@u014567183 

发现问题所在了,但是不知道什么原因造成的,这个是验证码的php
     $svali = GetCkVdValue();
        if(strtolower($vdcode)!=$svali || $svali=='') {
           ResetVdValue();
echo "验证码不正确";
            exit();
        };

这个是提交成功后发送邮件提醒的php
if($cfg_sendmail_bysmtp == 'Y')
{
$mailtitle = " 邮件提醒";
$mailbody = "您的信息于 {$sj} 提交成功"; 
$headers = $adminemail;
$mailtype = 'TXT';
require_once(INC.'/mail.class.php');
$smtp = new smtp($server,$port,true,$usermail,$password);
$smtp->debug = false;
$mail = "$email2,$cfg_smtp_jieshoumail";
$smtp->sendmail($smtpmail,$name ,$usermail, $mailtitle, $mailbody, $mailtype);
};


我把判断验证码的这一段放,到邮件提醒这段代码的后面就正常了,放到邮件提醒之前就不行,问题是出在哪里了?

#16


看不出你的两段代码有什么必然联系

都提交成功了,还验证个球?

#17


@xuzuning 
问题就怪在这里啊,
真正的顺序应该是先检测验证码是否正确,不正确就终止(验证码检测是在php文件的最顶端),验证码正确就把信息以邮件的方式发送到邮箱,然后把数据写入数据库,然后提示用户“操作成功”
现在的情况是,按照这样的顺序,功能的确实现了,就是验证码输入错误的时候,应该提示用户“验证码错误”的,但是ajax就不接收这个值,造成前端的页面假死。
如果把验证代码放到邮件代码后面,顺序就变成了这样:用户提交信息,发送信息到邮箱,判断验证码不正确并终止。这样子前段可以接收到“验证码不正确”的提示,但是邮件已经发送。
我很好奇为什么验证信息放在邮件代码后面就可以ajax接收,放前面就不行,而且我刚才把邮件的那段代码删除试了试,在不需要发送邮件的情况下,验证码代码直接不提示了,放在哪里都不提示。什么原因啊

#18


原因已经找到了,谢谢诸位。
是我大意了,为了让页面弹窗更柔和,设置了0.3秒后显示默认的弹窗:“正在提交,请不要刷新页面”,这样就造成了验证码不正确的提示被默认提示信息强行覆盖。而提交成功的提示由于需要发送邮件和储存数据库,有一定的延迟,故而在0.3秒之后才会显示,这样就能够覆盖了默认的提示。

我把0.3秒的默认弹窗取消之后就一切正常了。大意了...我的荆州啊。。。。。。。。

#19


各位大牛,我发现个问题,php中echo和exit都写的时候,echo无效了
哈哈,你的荆州

#1


exit("验证码不正确");

#2


引用 1 楼 qq_34494805 的回复:
exit("验证码不正确");


老哥 还是不行,ajax接收不到返回的值啊
alert(data);可以接到
$('#ok').html(data);就接不到了
问题出在哪啊

#3


要返回就不能用exit吧,

#4


引用 3 楼 qq_34494805 的回复:
要返回就不能用exit吧,

那该怎么写,让echo的值返回到div中之后再终止,除了exit还有别的终止代码吗

#5


alert(data); //这样可以
$('#ok').html(data); //这样就可以

不可能前一句有值,后一句就没了

#6


引用 5 楼 xuzuning 的回复:
alert(data); //这样可以
$('#ok').html(data); //这样就可以

不可能前一句有值,后一句就没了

可是$('#ok').html(data);真不不能返回信息啊,我把exit删掉之后就能返回,加上exit就不能返回,而且php中的另一个echo "执行成功";就可以(这个没有exit终止),echo "验证码不正确"; exit();这就不行了,所以我很奇怪,按理说应该先执行echo后再exit的。怪就怪在这里。
偏偏alert(data);就正常。

#7


alert(data); 
$('#ok').html(data);
这两个语句同时执行。
看看结果。

#8


引用 7 楼 u014567183 的回复:
alert(data); 
$('#ok').html(data);
这两个语句同时执行。
看看结果。

同时执行,还是只弹窗有效,div不接收应有的值

#9


弹窗有值吗?有值的话说明echo 有效了。剩下的跟php没关系了。

#10


data有值么,console.log(data)出来看看

#11


引用 9 楼 u014567183 的回复:
弹窗有值吗?有值的话说明echo 有效了。剩下的跟php没关系了。


弹窗有值,这么说问题出在ajax还是别的js里面?

#12


引用 10 楼 Just_cl 的回复:
data有值么,console.log(data)出来看看


console可以看到正常的值,这个到底什么原因啊。愁死人了。偏偏页面打印不出来相应的值

#13


把输出信息换成英文看看

#14


引用 13 楼 xuzuning 的回复:
把输出信息换成英文看看


换成英文或数字  都不行

#15


@xuzuning 
@u014567183 

发现问题所在了,但是不知道什么原因造成的,这个是验证码的php
     $svali = GetCkVdValue();
        if(strtolower($vdcode)!=$svali || $svali=='') {
           ResetVdValue();
echo "验证码不正确";
            exit();
        };

这个是提交成功后发送邮件提醒的php
if($cfg_sendmail_bysmtp == 'Y')
{
$mailtitle = " 邮件提醒";
$mailbody = "您的信息于 {$sj} 提交成功"; 
$headers = $adminemail;
$mailtype = 'TXT';
require_once(INC.'/mail.class.php');
$smtp = new smtp($server,$port,true,$usermail,$password);
$smtp->debug = false;
$mail = "$email2,$cfg_smtp_jieshoumail";
$smtp->sendmail($smtpmail,$name ,$usermail, $mailtitle, $mailbody, $mailtype);
};


我把判断验证码的这一段放,到邮件提醒这段代码的后面就正常了,放到邮件提醒之前就不行,问题是出在哪里了?

#16


看不出你的两段代码有什么必然联系

都提交成功了,还验证个球?

#17


@xuzuning 
问题就怪在这里啊,
真正的顺序应该是先检测验证码是否正确,不正确就终止(验证码检测是在php文件的最顶端),验证码正确就把信息以邮件的方式发送到邮箱,然后把数据写入数据库,然后提示用户“操作成功”
现在的情况是,按照这样的顺序,功能的确实现了,就是验证码输入错误的时候,应该提示用户“验证码错误”的,但是ajax就不接收这个值,造成前端的页面假死。
如果把验证代码放到邮件代码后面,顺序就变成了这样:用户提交信息,发送信息到邮箱,判断验证码不正确并终止。这样子前段可以接收到“验证码不正确”的提示,但是邮件已经发送。
我很好奇为什么验证信息放在邮件代码后面就可以ajax接收,放前面就不行,而且我刚才把邮件的那段代码删除试了试,在不需要发送邮件的情况下,验证码代码直接不提示了,放在哪里都不提示。什么原因啊

#18


原因已经找到了,谢谢诸位。
是我大意了,为了让页面弹窗更柔和,设置了0.3秒后显示默认的弹窗:“正在提交,请不要刷新页面”,这样就造成了验证码不正确的提示被默认提示信息强行覆盖。而提交成功的提示由于需要发送邮件和储存数据库,有一定的延迟,故而在0.3秒之后才会显示,这样就能够覆盖了默认的提示。

我把0.3秒的默认弹窗取消之后就一切正常了。大意了...我的荆州啊。。。。。。。。

#19


各位大牛,我发现个问题,php中echo和exit都写的时候,echo无效了
哈哈,你的荆州

#20