1
我的問題是php的responseStatusCodes沒有顯示在iOS上。無論我在sendResponse()中返回的狀態碼是什麼,當在iOS中讀取responseStatusCode時,我都會得到輸出500.爲什麼是這樣以及如何修復它?我假設這是PHP的錯誤,並且與ASIHTTPRequest無關。但爲了好的衡量,我已經包含了iOS端使用的代碼。ASIHTTPRequest和PHP狀態碼總是返回200或500
讓我知道如果他們是你需要幫助我的任何其他代碼。
在此先感謝!
這是我用來啓動到服務器的連接的代碼。
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
request.shouldAttemptPersistentConnection = NO;
[request setPostValue:name forKey:@"name"];
[request setPostValue:email forKey:@"email"];
[request setPostValue:phash forKey:@"phash"];
[request setDelegate:self];
[request startAsynchronous];
這是我在收到請求完成消息時運行的代碼。
/
- (void)requestFinished:(ASIHTTPRequest *)request
{
NSLog(@"Request Finished");
int statusCode = [request responseStatusCode];
if (statusCode == 150) {
NSLog(@"User Already Registered.");
} else if (statusCode == 155){
NSLog(@"User Not Registered");
} else if (statusCode == 403) {
NSLog(@"Tester 2");
} else if (statusCode == 200) {
if (registering == true){
[UIView animateWithDuration:1.0 animations:^{
_wheel.alpha = 0.0;
}];
[UIView animateWithDuration:1.0 delay:1.0 options:0 animations:^{
_clickToRegister.alpha=1.0;
}completion:nil];
} else {
[UIView animateWithDuration:1.0 animations:^{
_wheel.alpha = 0.0;
}];
[UIView animateWithDuration:1.0 delay:1.0 options:0 animations:^{
_clickToLogin.alpha=1.0;
}completion:nil];
}
NSLog(@"Tester 3");
} else if (statusCode > 1 && statusCode < 1000){
NSLog(@"Test Worked");
NSLog(@"%d",statusCode);
} else {
NSLog(@"%d",statusCode);
NSLog(@"Tester 4");
}
}
這是應該發送responseStatusCode的PHP代碼。
function sendResponse($status, $body = '', $content_type = 'text/html')
{
$status_header = 'HTTP/1.1 ' . $status . ' ' . 'error';
header($status_header);
header('Content-type: ' . $content_type);
echo $body;
}
這裏是調用這個函數的代碼。
sendResponse(503, 'User not Registered');
return false;
以下是其中包含sendResponse調用的整個文件的代碼。
<?php
require_once 'includes/main.php';
class dumb {
function dumber(){
echo "Hello, PHP!";
/*--------------------------------------------------
Handle visits with a login token. If it is
valid, log the person in.
---------------------------------------------------*/
if(isset($_GET['tkn'])){
// Is this a valid login token?
$user = User::findByToken($_GET['tkn']);
if($user){
// Yes! Login the user and redirect to the protected page.
$user->login();
redirect('panic://success');
}
// Invalid token. Redirect back to the login form.
redirect('panic://fail');
}
/*--------------------------------------------------
Handle logging out of the system. The logout
link in protected.php leads here.
---------------------------------------------------*/
if(isset($_GET['logout'])){
$user = new User();
if($user->loggedIn()){
$user->logout();
}
redirect('index.php');
}
/*--------------------------------------------------
Don't show the login page to already
logged-in users.
---------------------------------------------------*/
$user = new User();
if($user->loggedIn()){
redirect('protected.php');
}
/*--------------------------------------------------
Handle submitting the login form via AJAX
---------------------------------------------------*/
if (isset($_POST["name"]) && isset($_POST["email"]) && isset($_POST["phash"])){
rate_limit($_SERVER['REMOTE_ADDR']);
rate_limit_tick($_SERVER['REMOTE_ADDR'], $_POST['email']);
$message = '';
$name = $_POST["name"];
$email = $_POST["email"];
$phash = $_POST["phash"];
$subject = 'Your Login Link';
if(!User::exists($email)){
$subject = "Thank You for Registering!";
$message = "Thank you for registering at our site!\n\n";
// Attempt to login or register the person
$user = User::loginOrRegister($email, $name, $phash);
$message.= "You can login from this URL:\n";
$message.= get_page_url()."?tkn=".$user->generateToken()."\n\n";
$message.= "The link is going expire automatically after 10 minutes.";
$result = send_email($fromEmail, $_POST['email'], $subject, $message);
if(!$result){
sendResponse(403, 'Error Sending Email');
return false;
}
}
else{
sendResponse(150, 'User Already Registered');
return false;
}
}
else if(isset($_POST["email"]) && isset($_POST["phash"])){
rate_limit($_SERVER['REMOTE_ADDR']);
rate_limit_tick($_SERVER['REMOTE_ADDR'], $_POST['email']);
$message = '';
$name = '';
$email = $_POST["email"];
$phash = $_POST["phash"];
$subject = 'Your Login Link';
if(!User::exists($email)){
sendResponse(155, 'User Not Registered');
return false;
}
else{
// Attempt to login or register the person
$user = User::loginOrRegister($email, $name, $phash);
$message.= "You can login from this URL:\n";
$message.= get_page_url()."?tkn=".$user->generateToken()."\n\n";
$message.= "The link is going expire automatically after 10 minutes.";
$result = send_email($fromEmail, $_POST['email'], $subject, $message);
if(!$result){
sendResponse(403, 'Error Sending Email');
return false;
}
}
}
die(json_encode(array(
'message' => 'Thank you! We\'ve sent a link to your inbox. Check your spam folder as well.'
)));
/*--------------------------------------------------
Output the login form
---------------------------------------------------*/
}
}
$api = new dumb;
$api->dumber();
?>
嗯,我試了PHP代碼,它返回503.從一眼看來,它看起來像iOS代碼是正確的。你確定PHP正在運行'sendResponse(503,'未註冊用戶');'?你可以在調用該行之前回應一些信息,以驗證它是否被調用,並且由於之前出現了編碼錯誤,PHP不會將它傳遞給其他人以返回其他內容。這是我犯的一個常見錯誤。 –
如果我回應一些事情,那會有幫助嗎?我如何查看回應的內容? –
嗯,我確定'sendResponse(503 ...'在if語句中,對嗎?「if($ userNotRegistered){sendResponse(503 ...)'如果在'sendResponse'被調用之前打印一些東西,你可以肯定的是,503被設置爲PHP的狀態碼,設置503的PHP代碼是正確的,並且iOS似乎是正確的,所以它必須是PHP文件另一部分的編碼錯誤,必須把'echo「輸出503」;'sendResponse'前面,然後檢查iOS中的響應字符串,如果你給我這個網站的URL,我可以檢查我自己 –