使用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解决这个问题。有任何想法吗?谢谢。
答案 0 :(得分:39)
根据评论中的讨论判断,您的GET请求似乎成功(响应代码200),但响应正文不是您使用{{1}请求的有效JSON(也不是JSON片段) }。基本AFJSONResponseSerializer
可用于非JSON的响应。
答案 1 :(得分:3)
我很确定你有来自服务器的有效回复,但你的回复不是JSON中的有效格式,可能是因为你在第一个{前面有carachters。 请尝试这样做:在浏览器中手动输入相同的URL地址,您将看到响应中的罪魁祸首。希望它有所帮助。
答案 2 :(得分:-2)
嘿伙计这就是我发现的问题:我通过一个功能来验证用户呼叫Alamofire:我使用了功能"登录用户"使用将从" body"(email:String,password:String)调用的参数将传递
我的错误完全是:
可选(alamofire.aferror.responseserializationfailed(alamofire.aferror.responseserializationfailurereason.jsonserializationfailed)(错误域= nscocoaerrordomain代码= 3840"字符0周围的值无效。" userinfo = {nsdebugdescription =字符0周围的无效值
字符0是这里的关键:意味着呼叫"电子邮件"与参数不匹配:请参阅下面的代码
func loginUser(email:String,password:String,completed:@escaping downloadComplete){ 让lowerCasedEmail = email.lowercased()
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)
}
&#34;电子邮件&#34;在函数参数中必须匹配let&#34; email&#34;解析然后它将工作..我不再有错误...而字符0是&#34;电子邮件&#34;在&#34;身体&#34; Alamofire请求的参数:
希望这有帮助