【问题标题】:AFNetworking - the data is loaded, but error 504 occurredAFNetworking - 数据已加载,但出现错误 504
【发布时间】:2016-05-25 07:14:28
【问题描述】:

我有这个代码:

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

NSDictionary *parameters = @{@"client_id": some index};

[manager GET:@"some address"
  parameters:parameters
    progress:^(NSProgress * _Nonnull progress) {
        NSLog(@"In progress: %d%%", (int)([progress fractionCompleted] * 100 ));
    }
     success:^(NSURLSessionTask *task, id responseObject) {
         [self processData:[responseObject objectForKey:@"orders"]];
     }
     failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
         NSLog(@"%@", error);
     }];

它是从viewDidLoad 调用的。大多数情况下它运行良好,但有时我会收到此错误:

Error Domain=com.alamofire.error.serialization.response Code=-1011 “请求失败:网关超时 (504)” UserInfo={NSUnderlyingError=0x7fdd40c18aa0 {Error Domain=com.alamofire.error.serialization.response Code =-1016 "请求失败:不可接受的内容类型:text/html" ...等等,没什么有趣的...

但是,在控制台上我看到 “进行中:100%”。此外,在浏览器中,我总是可以获取所有数据。因此,我建议,这是我的代码的问题。我该如何解决这个问题?

【问题讨论】:

    标签: ios objective-c networking afnetworking afnetworking-3


    【解决方案1】:

    您可以通过以下代码处理这些错误 .. :)

    - (void)requestFinished:(ASIHTTPRequest *)request
    {
        NSString *str = [request responseString];
        NSLog(@"%@",str);
        NSMutableDictionary *dictjson = [str JSONValue];
    
        NSInteger iStatus = [[dictjson objectForKey:@"status"] integerValue];
        if (iStatus == 200)
        {
            //        NSMutableDictionary *dictuser = [dictjson objectForKey:@"userinfo"];
            //        [AppDelegate showMessage:@"Register successed" withTitle:@"Success"];
            [self performSegueWithIdentifier:@"sw_right" sender:nil];
        }
        else
        {
            switch (iStatus)
            {
                case 1000:
                    [AppDelegate showMessage:@"Packet no field" withTitle:@"Error"];
                    return;
                    break;
                case 600:
                    [AppDelegate showMessage:@"Email duplicated" withTitle:@"Error"];
                    return;
                    break;
                case 606:
                    [AppDelegate showMessage:@"Register failed, Please try again." withTitle:@"Error"];
                    return;
                    break;
    
                default:
                    [AppDelegate showMessage:@"Register failed, Please try again." withTitle:@"Error"];
                    return;
                    break;
            }
        }
    }
    

    发布请求

        ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://yourApiURL"]]];
    
        [request setPostValue:strFirstName   forKey:@"fname"];
        [request setPostValue:strLastName    forKey:@"lname"];
        [request setPostValue:strUniversity  forKey:@"university"];
        // add post parameters so on
    
        [request addRequestHeader:@"Content-Type" value:@"application/json"];
        [request addRequestHeader:@"Accept" value:@"application/json"];
        [request setDelegate:self];
        [request setTimeOutSeconds:30.0];
        [request setRequestMethod:@"POST"];
        [request startAsynchronous];
    

    【讨论】:

    • 我是 AFNetworking 的新手,您能解释一下如何将这段代码与我的代码混合使用吗?
    • @AivanF。您可以使用此代码使用 ASIHTTPRequest lib link here 在此之后查看我更新的代码以将数据发送到服务器.. 请注意:亲爱的,您必须在实现之前理解代码。
    【解决方案2】:

    504 Gateway Timeout 错误是一个 HTTP 状态代码,表示在尝试加载网页或填充浏览器的另一个请求时,一台服务器没有收到来自它正在访问的另一台服务器的及时响应。

    在此处阅读更多信息:http://pcsupport.about.com/od/findbyerrormessage/a/504error.htm

    所以你的代码没有错。

    【讨论】:

    • 但是你知道,为什么我仍然得到 100% 的完成度吗?
    • @AivanF。我没有可靠的解释,但尝试序列化,因为错误显示 error.serialization。请参阅此进行序列化:github.com/AFNetworking/AFNetworking
    猜你喜欢
    • 1970-01-01
    • 2020-12-10
    • 2017-04-26
    • 2018-08-24
    • 2014-02-13
    • 2018-08-30
    • 2018-03-06
    • 2020-08-01
    相关资源
    最近更新 更多