iOS: JSON анализирует ошибку при использовании return вместо echo в файле сервиса PHP

0

У меня есть 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?

  • 2
    Для того, чтобы это работало, вы должны повторить что-то, чтобы отправить обратно через запрос AJAX, return не выводит то, что может прочитать запрос AJAX. И почему в мире вы жестко программируете JSON?
  • 0
    @jay-blanchard Jay-Blanchard, потому что я знаю только так :), что ты предлагаешь? Каков верный способ сделать это? Создать ассоциативный массив и эхо, что может быть?
Показать ещё 4 комментария
Теги:
echo
afnetworking-2

1 ответ

3
Лучший ответ

Для того, чтобы AJAX мог читать выходные данные из PHP, PHP должен повторить ответ. Если вы используете return AJAX не может читать и использовать данные, поскольку он ожидает получить один из нескольких текстовых типов данных: XML, HTML, скрипт, JSON, JSONP или обычный текст. return не предусматривает этого.

Кроме того, вы не должны создавать строки JSON вручную, поскольку это может быть сложной задачей, связанной с возможностью многих синтаксических ошибок. Используйте функции PHP JSON - json_encode() и json_decode().

Ещё вопросы

Сообщество Overcoder
Наверх
Меню