У меня есть следующие HTTP
запрос с AFNetworking
:
NSMutableDictionary *dictionary = [NSMutableDictionary new];
[dictionary setObject:@"login" forKey:@"request"];
[dictionary setObject:@"q" forKey:@"userName"];
[dictionary setObject:@"q" forKey:@"password"];
DDLogDebug(@"LoginView - login - Dictionary: %@", [dictionary description]);
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager setRequestSerializer:[AFJSONRequestSerializer serializer]];
[manager setResponseSerializer:[AFJSONResponseSerializer serializer]];
//[manager.securityPolicy setAllowInvalidCertificates:true];
AFHTTPRequestOperation *operation =
[manager POST:WEB_SERVICE_URL
parameters:dictionary
success:^(AFHTTPRequestOperation *operation, id responseObject) {
dispatch_async(dispatch_get_main_queue(), ^{
DDLogDebug(@"LoginView - Success Response: %@", responseObject);
NSString *success = [responseObject objectForKey:@"success"];
if ([success isEqualToString:@"1"]) {
DDLogDebug(@"LoginView - Login successful!");
[self performSegueWithIdentifier:kSegueLoginToTimeLine sender:self];
}
else {
DDLogError(@"LoginView - Login failed!");
[HMXCommonMethods showMessage:@"Kullanıcı adı ya da şifre hatalı" withTitle:@"Hata!"];
}
});
}
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
DDLogError(@"LoginView - Error Response: %@", [error localizedDescription]);
NSInteger statusCode = [operation.response statusCode];
switch (statusCode) {
case 500:
[HMXCommonMethods showMessage:@"Sunucu hatası nedeniyle giriş yapılamadı!" withTitle:@"Hata!"];
break;
case 408:
[HMXCommonMethods showMessage:@"İstek zaman aşımına uğradı!" withTitle:@"Hata!"];
break;
case 404:
[HMXCommonMethods showMessage:@"Sunucuya erişilemedi!" withTitle:@"Hata!"];
break;
default:
[HMXCommonMethods showMessage:@"Sunucu hatası nedeniyle giriş yapılamadı!" withTitle:@"Hata!"];
break;
}
});
}];
[operation start];
DDLogError(@"LoginView - login - request started.");
Когда я отвечаю на этот запрос в моем PHP
файл со следующим echo
код работает нормально:
$response = "{\"success\":\"1\",";
$response = $response . "\"id\":\"" . $id . "\",";
$response = $response . "\"companyid\":\"" . $cid . "\",";
$response = $response . "\"companyname\":\"" . $cname . "\",";
$response = $response . "\"name\":\"" . $name . "\",";
$response = $response . "\"surname\":\"" . $surname . "\",";
$response = $response . "\"email\":\"" . $email2 . "\",";
$response = $response . "\"password\":\"" . $password2 . "\"}";
$stmt2->close();
$log = "Company ID = " . $cid . "\n" .
"Company Name = " . $cname . "\n" .
"Company Address = " . $caddress . "\n" .
"Company Phone = " . $cphone . "\n" .
"Company Web Page = " . $cwebpage . "\n";
$this->logger->debug("GetUser: Company Info:\n" . $log);
$this->logger->debug("GetUser: Response:\n" . $response);
echo $response;
Если я изменю echo
с return
я получил JSON pars error 3840
, Я также пытался
echo json_encode($response)
return json_encode($response)
Но это не сработало, и я получил ту же ошибку. Как я могу использовать return
без JSON
ошибка?
Чтобы AJAX мог читать выходные данные из PHP, PHP должен повторить ответ. Если вы используете return
AJAX не может читать и использовать данные, так как ожидает получения одного из нескольких текстоподобных типов данных: XML, HTML, script, JSON, JSONP или обычный текст. return
не обеспечивает это.
Кроме того, вы не должны формировать строки JSON вручную, так как это может быть сложным делом с возможностью возникновения многих синтаксических ошибок. Используйте функции PHP JSON — json_encode()
а также json_decode()
.
Других решений пока нет …