代码之家  ›  专栏  ›  技术社区  ›  Olcay Ertaş Mohammad Razipour

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

  •  0
  • Olcay Ertaş Mohammad Razipour  · 技术社区  · 11 年前

    我有以下内容 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;
    

    如果我改变了 回响 具有 return 我明白了 JSON pars error 3840 。我也尝试过

    echo json_encode($response)
    return json_encode($response)
    

    但它不起作用,我也犯了同样的错误。我如何使用 回来 没有 JSON 错误

    1 回复  |  直到 11 年前
        1
  •  2
  •   Jay Blanchard Daan    11 年前

    为了让AJAX能够读取PHP的输出,PHP必须响应响应。如果您使用 return AJAX无法读取和使用数据,因为它希望接收几种类似文本的数据类型之一:XML、HTML、脚本、JSON、JSONP或纯文本。A. 回来 没有提供这一点。

    此外,您不应该手动形成JSON字符串,因为这可能是一件复杂的事情,可能会出现许多语法错误。利用PHP的JSON函数- json_encode() json_decode() .