Ios (可可错误3840)。”;(字符0周围的值无效。)AFNetworking

Ios (可可错误3840)。”;(字符0周围的值无效。)AFNetworking,ios,objective-c,json,cocoa-touch,afnetworking-2,Ios,Objective C,Json,Cocoa Touch,Afnetworking 2,使用GET方法从服务器检索文件时,我遇到以下错误: Error: Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Invalid value around character 0.) UserInfo=0x16e81ed0 {NSDebugDescription=Invalid value around character 0.} 我尝试了

使用GET方法从服务器检索文件时,我遇到以下错误:

Error: Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Invalid value around character 0.) UserInfo=0x16e81ed0 {NSDebugDescription=Invalid value around character 0.}
我尝试了许多不同的方法,我相信这可能与我试图获取的文件的JSON格式有关

以下是我一直在使用的代码:

_username = @"JonDoe";
NSDictionary *parameters = @{ @"username" : _username};
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"];

[manager GET:@"http://.........."
  parameters:parameters
     success:^(AFHTTPRequestOperation *operation, id responseObject) {
         NSLog(@"JSON: %@", responseObject);
     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
         NSLog(@"Error: %@", error);
     }];

我的POST方法很好用。我似乎无法用GET解决这个问题。有什么想法吗?谢谢。

根据评论中的讨论判断,GET请求似乎成功(响应代码200),但响应正文不是有效的JSON(也不是JSON片段),正如您使用
AFJSONResponseSerializer所请求的那样。基本的
AFHTTPResponseSerializer
可用于非JSON的响应。

我非常确定您从服务器获得了有效的响应,但您的响应不是JSON的有效格式,可能是因为您在第一个{。
请尝试以下操作:在浏览器中手动输入相同的URL地址,您将在响应中看到罪魁祸首。希望能有所帮助。

嘿,伙计们,这就是我发现的问题:我通过一个函数调用Alamofire来验证用户:我使用了函数“Login User”,其中的参数将从“body”调用(电子邮件:String,密码:String)将被传递的

我的错误恰恰是:

可选(alamofire.aferror.responseserializationfailed)(alamofire.aferror.ResponseSerializationFaileureReason.jsonserializationfailed)(错误域=NSCOCAerorDomain代码=3840“字符0周围的无效值”。用户信息={nsdebugdescription=字符0周围的无效值

字符0是此处的键:表示对“电子邮件”的调用与参数不匹配:请参阅下面的代码

func登录用户(电子邮件:String,密码:String,已完成:@转义下载完成){ let lowerCasedEmail=email.lowercased()

let头=[
“内容类型”:“应用程序/json;字符集=utf-8”
]
let body:[字符串:任意]=[
“电子邮件”:小写的电子邮件,
“密码”:密码
]
请求(登录用户,方法:.post,参数:body,编码:JSONEncoding.default,头:header)
如果response.result.error==nil{
如果让数据=response.result.value作为字典{
如果让email=data[“user”]作为字符串{
self.userEmail=电子邮件
打印(self.userEmail)
}
如果让令牌=数据[“令牌”]作为字符串{
self.token\u Key=token
打印(self.token\u密钥)
}
函数参数中的“email”必须与解析时的let“email”匹配,然后才能工作..我不再收到错误…并且字符0是Alamofire请求的“body”参数中的“email”:


希望这有帮助

如果没有看到实际的GET请求,或者至少是
\u username
的值,我们就不可能帮助您。文档还说,当无法解析响应时会执行失败块,因此也要检查回复。好的,那么现在如何处理
操作。响应
操作。响应SerializationError=错误:summary string parsing error否,我指的是实际响应…或任何可以获取实际http响应头+体的方式。对这个特定API不是非常熟悉。感谢您的帮助Brad。我对JSON是新手。如果我将一个文件作为JSON上传到Apache服务器,当我请求获取时,它应该不是有效的JSON,还是可以更改由服务器发送的数据?@Jonathan我不确定你在问什么。你不能通过GET上传任何内容。你收到的错误是由于服务器对你的GET请求的响应,而不是你的GET请求本身。GET请求也不是典型的json。服务器的响应可以是任何内容。不,我的意思是我使用POST方法上传的,我在这里sed JSON。因此,如果我使用JSON上传,我可以使用其他序列化程序下载?@Jonathan应根据您期望从服务器获得的响应数据类型选择
响应序列化程序
。它与您发布的内容无关。我将其切换到AFHTTPResponseSerializer,并且似乎正在工作。我只需要测试它当我有机会的时候谢谢Brad。
    let header = [
        "Content-Type" : "application/json; charset=utf-8"
    ]
    let body: [String: Any] = [
        "email": lowerCasedEmail,
        "password": password
    ]

    Alamofire.request(LOGIN_USER, method: .post, parameters: body, encoding: JSONEncoding.default, headers: header).responseJSON { (response) in
        if response.result.error == nil {

            if let data = response.result.value as? Dictionary<String, AnyObject> {
                if let email = data["user"] as? String {
                    self.userEmail = email
                    print(self.userEmail)
                }
                if let token = data["token"] as? String {
                    self.token_Key = token
                    print(self.token_Key)
                }