2015-04-05 60 views
0

我有一个问题,删除与AFNetworking的照片,以客观C. 这是我的目标C代码的照片:删除与afnetworking

- (void)supprimerPhoto:(NSString*)nomPhoto{ 
    NSString *stringUrl =URL_DELETE_PHOTO; 
    //NSURL *filePath = [NSURL URLWithString:[[URL_PHOTOS stringByAppendingString:nomPhoto]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
    manager.responseSerializer = [AFJSONResponseSerializer serializer]; 

    NSDictionary *parameters = @{@"photo_a_supprimer" : nomPhoto}; 
    [manager POST:stringUrl parameters:parameters 
      success:^(AFHTTPRequestOperation *operation, id responseObject) { 
       NSLog(@"OK"); 
      } 
      failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
       NSLog(@"error=%@", error.description); 
       NSLog(@"responseString=%@", operation.responseString); 
      }]; 
} 

这里是我的PHP:

<?php 
error_reportin(E_ALL); 
header('Content-type: application/json') 
$photo_a_supprimer=$_POST["photo_a_supprimer"]; 

if (file_exists("Photos/".$photo_a_supprimer)) 
{ 
unlink("Photos/".$photo_a_supprimer); // ok c’est supprimé 
} 
?> 

时它执行我有这个错误:

2015-04-05 17:19:07.357 TableauDeChasse[4607:4457365] error=Error Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: internal server error (500)" UserInfo=0x792b9460 {com.alamofire.serialization.response.error.response=<NSHTTPURLResponse: 0x7869db00> { URL: http://tableaudechasse.fr/DeletePhoto.php } { status code: 500, headers { 
    Connection = close; 
    "Content-Encoding" = gzip; 
    "Content-Type" = "text/html"; 
    Date = "Sun, 05 Apr 2015 15:19:03 GMT"; 
    Server = Apache; 
    "Set-Cookie" = "300gp=R393523723; path=/; expires=Sun, 05-Apr-2015 16:26:57 GMT"; 
    "Transfer-Encoding" = Identity; 
    Vary = "Accept-Encoding"; 
    "X-Powered-By" = "PHP/5.4.38"; 
} }, NSErrorFailingURLKey=http://tableaudechasse.fr/DeletePhoto.php, NSLocalizedDescription=Request failed: internal server error (500), com.alamofire.serialization.response.error.data=<>} 
2015-04-05 17:19:10.679 TableauDeChasse[4607:4457365] responseString= 

有人可以解释我什么是我的连接错误ection? 似乎问题来自.php,但如果你有建议,它会很好。

+0

将错误级别设置为E_ALL,display_errors为true,并记录服务器响应,它可能会给你足够的信息来调试问题。 – Cristik 2015-04-05 13:08:09

+0

是Rob,我只想发送要删除的文件的名称。我如何以简单的方式使用邮政?也许我可以做到这一点没有AFNetworking? – pourpre 2015-04-05 13:21:26

+0

顺便说一句,PHP代码似乎在那里有一个额外的'unlink'。我怀疑你在试验服务器代码的时候已经完成了,但这是不正确的。在检查文件是否存在之前,除去你的“unlink”。 – Rob 2015-04-05 15:23:11

回答

0

你的PHP中有两个误区:

  1. 你拼错error_reporting

  2. 您在header()后缺少分号。

您可能应该返回一些JSON,否则客户端在尝试解析JSON时会失败。我建议是这样的:

<?php 
error_reporting(E_ALL); 
header('Content-type: application/json'); 
$photo_a_supprimer = $_POST["photo_a_supprimer"]; 

if (file_exists("Photos/".$photo_a_supprimer)) 
{ 
    unlink("Photos/".$photo_a_supprimer); // ok c’est supprimé 
    echo json_encode(Array("success" => true)); 
} else { 
    echo json_encode(Array("success" => false, "message" => "File not found")); 
} 
?> 

显然你必须做的$photo_a_supprimer一些验证,以确保它不包含任何.../字符,但是这是一个基本的想法。

然后客户端代码应该分析此JSON响应:

- (void)supprimerPhoto:(NSString*)nomPhoto{ 
    NSString *stringUrl = URL_DELETE_PHOTO; 

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
    NSDictionary *parameters = @{@"photo_a_supprimer" : nomPhoto}; 
    [manager POST:stringUrl parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { 
     if ([responseObject[@"success"] boolValue]) { 
      NSLog(@"Success"); 
     } else { 
      NSLog(@"failed: %@", responseObject[@"message"]); 
     } 
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
     NSLog(@"Error=%@", error); 
     NSLog(@"responseString=%@", operation.responseString); 
    }]; 
} 

我原来的答复(基于原来的问题)如下。上传文件的内容时


constructingBodyWithBlock模式被使用,但在这种情况下,它看起来像你的PHP只是供应文件的名称,所以我会做这样的事情:

- (void)supprimerPhoto:(NSString*)nomPhoto{ 
    NSDictionary *parameters = @{@"photo_a_supprimer" : nomPhoto}; 
    [manager POST:stringUrl parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { 
     NSLog(@"OK"]); 
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
     NSLog(@"error=%@", error); 
     NSLog(@"responseString=%@", operation.responseString); 
    }]; 
} 

我只是在没有Xcode帮助的情况下输入的,所以请原谅任何错别字,但希望它能说明这个想法。只需使用参数创建NSDictionary并将其传递给POST方法,而不使用constructingBodyWithBlock模式。


注意上面包括一些小的,不相关的更改:

  1. 如果您收到抱怨的反应是text/html,你可能想看看operation.responseString,看看有什么错误对象该HTML的内容是(如果有的话)。如果您的服务器在HTML响应中报告了一些错误,您可能需要阅读它所说的内容。请参阅上面错误块中的responseString的日志记录。当您开始生产时,您需要修改该错误处理块,但在此诊断阶段,请查看Web服务器返回的任何内容。

  2. 我将supprimerPhoto更改为void返回类型。如果您确实想要传回成功或失败信息,则可以使用完成处理程序块参数,以便此方法可以异步地将成功/失败报告回调用例程。

+0

响应为空。我能做些什么来查看Web服务器返回的内容? – pourpre 2015-04-05 14:54:17

+0

我只是更新我的问题与PHP文件,代码和调试错误。我用_POST替换了_REQUEST,并将头部('Content-type:application/json')放入。 – pourpre 2015-04-05 15:27:57

+0

关于我的请求,它只是“URL_DELETE_PHOTO”,这是我的PHP文件的正确路径:@“http://xxxxxx.fr/DeletePhoto.php” – pourpre 2015-04-05 15:38:51