iOS:在 PHP 服务文件中使用返回而不是回显时出现 JSON pars 错误


iOS: JSON pars error when using return instead of echo in PHP service file

我有以下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.");

当我使用以下echo代码在我的PHP文件中响应此请求时,它工作正常:

$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;

如果我用return更改echo,我会得到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()