problem with flash AS3 if/else statements
I'm trying to use the if statement in flash to check if a variable (fetched from PHP) is equal to something, but something is going wrong.
The code:
function completeHandler(event:Event):void{
// Load the response from the PHP file
var data:URLVariables = new URLVariables(event.target.data);
var return_stat = data.return_stat_verify;
if (return_stat == "FAILED"){
status_txt.text = "dsfdsfg";
}
else if (return_stat == "PASSED"){
var first_nme = data.return_first;
var second_nme = data.return_second;
var email_addr = data.return_email;
var user_domain = data.return_domain;
var user_name = data.return_username;
gotoAndPlay("finish");
first_txt.text = first_nme;
second_txt.text = second_nme;
email_txt.text = email_addr;
username_txt.text = user_name;
domain_txt.text = user_domain;
}
Now when i test that, nothing happens. I then make an attempt to place a simple else
statement in there to see if both if
and else if
statements fail.
the code:
function completeHandler(event:Event):void{
// Load the response from the PHP file
var data:URLVariables = new URLVariables(event.target.data);
var return_stat = data.return_stat_verify;
if (return_stat == "FAILED"){
开发者_如何学JAVA status_txt.text = "dsfdsfg";
}
else if (return_stat == "PASSED"){
var first_nme = data.return_first;
var second_nme = data.return_second;
var email_addr = data.return_email;
var user_domain = data.return_domain;
var user_name = data.return_username;
gotoAndPlay("finish");
first_txt.text = first_nme;
second_txt.text = second_nme;
email_txt.text = email_addr;
username_txt.text = user_name;
domain_txt.text = user_domain;
}
else {
status_txt.text = "I hate flash";
}
Now when i test that, flash prints out "I hate flash" in the status_txt
field. So i then replace the value of status_txt
to print out the variable that I'm using the if statements with (return_stat
):
else {
status_txt.text = return_stat;
}
Then when i test it, it shows either PASSED or FAILED. Which means the issue does not lie in PHP as it's returning the correct data and the issue lies within the If
statements.
I'm completely lost here. I don't see anything that I've done wrong, any ideas?
Thanks guys.
EDIT
My PHP CODE:
<?php
require ('installation_5_functions.php');
require ('cust_ver_i.php');
$username=$_POST['userName'];
$ident_encrypt=$_POST['userPsswrd'];
verify($reference_id, $username, $ident_encrypt);
if ($ref_id_stat == "FAILED"){
$retrn_stat = "FAILED";
print "return_value=$error_ref_id&return_stat_verify=$retrn_stat";
exit();
}
if($ref_id_stat == "PASSED"){
if ($user_verify_status == "FAILED"){
$retrn_stat = "FAILED";
print "return_value=$user_verify_error&return_stat_verify=$retrn_stat";
}
elseif ($user_verify_status == "PASSED"){
if ($cust_status == "DEACT"){
$retrn_stat = "FAILED";
print "return_value=$display_error_stat&return_stat_verify=$retrn_stat";
}
elseif ($cust_status == "ACTIVE"){
$retrn_stat = "PASSED";
print "return_first=$cust_first&return_second=$cust_last&return_email=$cust_email&return_username=$cust_username&return_domain=$cust_domain&return_stat_verify=$retrn_stat";
}
}
}
?>
A lot of times there can be issues with whitespace. For example, if
data.return_stat_verify == 'FAILED '
When you put it into a TextField, there will not appear to be a difference. To see if this is the case, you might try:
// place a character on both sides. That will show whether there is whitespace
status_txt.text = "|"+return_stat+"|";
EDIT
It looks like this is the case below. This means you need to trim your input. First, make sure that there is no extra whitespace in the PHP file (do you have the last line as ?>
or is there an empty line at the end? An empty line, outside of ?>
would cause the problem you describe.
Then, for safety's sake, check the input as well. Personally, I would use StringUtil.trim
because it is the most explicit and because most languages have some way to do something very similar. Failing that, I would use regex to fix this:
// using two to be explicit
// /^\s+/m this removes all occurrences of one or more spaces at the beginning
return_stat = return_stat.replace(/^\s+/m, "");
// /\s+$/m this removes all occurrences of one or more spaces at the end
return_stat = return_stat.replace(/\s+$/m, "");
Of course, you could just in-line it:
// use the global flag if you are doing this all at once.
return_stat = return_stat.replace(/^\s+|\s+$/mg, "");
Maybe you are not getting a String as return from the server? Try checking the type of the return.
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/operators.html?filter_flash=cs5&filter_flashplayer=10.2&filter_air=2.6#typeof
Ok, I've managed to solve the problem. I placed exit();
at the bottom of every if/else statement in the php script and it seems to be working now. Makes no sense what so ever but it did the trick.
Thanks for your help.
The problem could be caused by the closing php tag: ?>
See: Why would one omit the close tag?
Any whitespace after that tag would be appended to any print/echo output. While additional whitespace in a html page wouldn't cause trouble, in your case it's a problem. It is easy to miss that, so it's best to avoid using the closing tag in those cases or to really make sure there aren't any characters after the tag.
精彩评论