2014-05-20 2 views
2

을 사용하여 AFNetworking 2.0을 사용하여 응답을 얻을 수 없습니다.이 방법을 사용하여 데이터를 가져올 수 없지만 다른 URL을 사용할 때 작동하지만 응답을받는 우편 발송자에서 테스트했습니다.GET 메서드

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 

// if you want to sent parameters you can use above code 

manager.requestSerializer = [AFJSONRequestSerializer serializer]; 

[manager GET:@"http://192.168.1.156:81/a.php" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { 

    NSLog(@"responseObject %@",responseObject); 

} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 

}]; 

오류 :

 
"Request failed: unacceptable content-type: text/html" UserInfo=0x8a6b000 {NSErrorFailingURLKey=http://192.168.1.156:81/a.php, AFNetworkingOperationFailingURLResponseErrorKey= { URL: http://192.168.1.156:81/a.php } { status code: 200, headers { 
    Connection = "Keep-Alive"; 
    "Content-Type" = "text/html"; 
    Date = "Tue, 20 May 2014 14:49:20 GMT"; 
    "Keep-Alive" = "timeout=5, max=100"; 
    Server = "Apache/2.4.4 (Win64) PHP/5.4.12"; 
    "Transfer-Encoding" = Identity; 
    "X-Powered-By" = "PHP/5.4.12"; 
} }, NSLocalizedDescription=Request failed: unacceptable content-type: text/html} 

있는 NSArray 변환 오류 :

Parsing JSON failed: Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Invalid escape sequence around character 4677.) UserInfo=0xa82c130 {NSDebugDescription=Invalid escape sequence around character 4677.}

Parse error on line 258: 
...  "story_title": "today\'s story", 
-----------------------^ 
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '[' 
+0

'failure' 블록에서'NSError' 객체를 검사 해 보셨습니까? 그것은 무엇을 말하는가? – Rob

+0

@Rob - 내 질문에 대답이 – user3635892

+0

업데이트되었습니다. 질문에 관련이 없지만, BTW, 'GET' 요청에 대해 AFJSONRequestSerializer를 지정하는 것이 조금 궁금합니다. 'GET' 요청에는 본문이 없지만 URL에 매개 변수가 인코딩됩니다. 게다가 매개 변수가 없습니다. – Rob

답변

4

귀하의 오류 메시지가 (AFNetworking는 JSON 응답을 기대되었음을 말하고있다 즉, Content-Type의 응답의 헤더는 application/json이고 th의 본문이어야합니다. 응답은 실제 JSON이어야 함). 여기 가능성의 수

하나 :

  1. 귀하의 서비스가 JSON 본체를 반환하지만, Content-Type 헤더를 지정 무시된다. 당신이 (선호되는 솔루션이다)를 PHP를 해결할 수없는 경우, 당신은 다른 방법도 Content-Typetext/html을 받아 AFNetworking 말할 수

    header("Content-Type: application/json"); 
    

    : 당신의 PHP 코드에서 데이터를 전송하기 전에 Content-Type 헤더를 지정합니다. 나는이 테스트를하지 않은,하지만 다음과 같은이 기본 AFJSONResponseSerializeracceptableContentTypes의 세트에 text/html을 추가해야합니다 :

    manager.responseSerializer.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"]; 
    
  2. 웹 서비스를 JSON을 반환하도록 설계되지 않았습니다. 이 경우에는 비 JSON 응답, 예를 허용하도록 manager을 구성해야합니다

    mananger.responseSerializer = [AFHTTPResponseSerializer serializer]; 
    
  3. 웹 서비스가 제대로 JSON 응답을 반환하도록 설계하지만, 제대로되는 것을 JSON을 방지 일부 프로그램 오류가 발생한다 생성됩니다. 이 경우 manager을 일시적으로 변경하여 JSON이 아닌 응답 (위의 2 번과 같은)을 받아 들인 다음 응답을 검토하십시오 (물론 php.ini에서 오류를보고했다고 가정).

    당신이 당신의 JSON 표시되는 경우
    NSLog(@"responseObject = %@", [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding); 
    

    , 당신은 NSJSONSerialization를 사용하여 배열에 그것을 변환 할 수 있습니다 :

    NSError *error; 
    NSArray *array = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:&error]; 
    if (!array) { 
        NSLog(@"Parsing JSON failed: %@", error); 
    } 
    

    를 분명히, 당신은 당신이 원하는대로 클래스 속성 또는 인스턴스 변수로이 지역 NSArray 객체를 저장할 수 있습니다 .


당신은 JSON 구문 분석 오류가 귀하의 질문에 업데이트되었습니다. 이는 JSON에서 \ 문자의 결과입니다. 그건 유효하지 않아. JSON을 http://jsonlint.com에 붙여 넣으면 확인이됩니다. PHP가 JSON을 올바르게 생성하지 않습니다. ' 앞에있는 \을 제거하십시오. JSON에 큰 따옴표를 포함하는 경우에만이 백 슬래시 이스케이프를 사용해야합니다.

솔직히이 JSON을 수동으로 생성 한 것으로 보입니다. 이러한 모든 종류의 JSON 오류를 피하기 위해 적절한 모든 이스케이프 처리를 수행하는 PHP 함수 json_encode을 사용하는 것이 훨씬 낫습니다.

+0

NSArray로 변환 할 수없는 이유 – user3635892

+0

@user3635892 응답이 JSON입니까? 그런 다음 PHP에서 JSON'Content-Type' 헤더를 지정해야합니다 (AFNetworking이이 변환을 수행 할 수 있도록)하거나 수동으로 응답 serializer의 acceptableContentTypes를 무시해야하거나 AFHTTPResponseSerializer를 지정해야합니다. '위에서 설명한대로 NSJSONSerialization을 직접 수행하십시오. 질문을 업데이트하고 더 많은 도움을 주실 수있는 답변을 보내주십시오. – Rob

+0

옵션 3 NSData 문자열로 변환 한 다음 NSArray로 변환하는 방법 – user3635892

0

- (무효) load_home_page_data_withIndex : (있는 NSString *) 시작 인덱스 andTotalRecord : 나는했습니다

[cell.Profile_btn setBackgroundImageForState:UIControlStateNormal 
        withURL:[NSURL URLWithString: [ 
         NSString stringWithFormat:@"http://downloadwhatsbest.com/assets/front/users/thumb/%@", 
          [photo_name objectAtIndex:indexPath.row] 
         ] 
        ] 
        placeholderImage:[UIImage imageNamed:@"USER_INVITE"]]; 

: (있는 NSString *) {

NSDictionary *favParameter; 
NSString *URL1; 
[MBProgressHUD showHUDAddedTo:[[[UIApplication sharedApplication] delegate] window] animated:YES]; 

AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] init]; 

NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults]; 

NSString *uId=[defaults valueForKey:@"UserID"]; 
manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 

URL1=[BASE_URL stringByAppendingString:@"home"]; 
[email protected]{ 
       @"user_id":uId,//[defaults valueForKey:@"UserID" 
      // @"no":startindex, 
      // @"total_record":count, 
       }; 

AFHTTPRequestOperation *op = [manager POST:URL1 parameters:favParameter constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 
} 
            success:^(AFHTTPRequestOperation *operation, id responseObject) 

           { 
            __weak Home *weakSelf = self; 
            [weakSelf.tblObj.pullToRefreshView stopAnimating]; 
            [weakSelf.tblObj.infiniteScrollingView stopAnimating]; 

            [MBProgressHUD hideHUDForView:[[[UIApplication sharedApplication] delegate] window] animated:YES]; 

            NSError *jsonParsingError = nil; 
            NSMutableDictionary *responseDict = (NSMutableDictionary *)[NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers|NSJSONReadingAllowFragments error:&jsonParsingError]; 


            [album_id removeAllObjects]; 
            [photo_id removeAllObjects]; 
            [photo_name removeAllObjects]; 
            [likes removeAllObjects]; 
            [user_id removeAllObjects]; 
            [is_like removeAllObjects]; 
            [Owner_id removeAllObjects]; 
            [imagesarr removeAllObjects]; 
            [user_name removeAllObjects]; 
            [arrPhotoDetail removeAllObjects]; 
            [share_name removeAllObjects]; 
            [date_time removeAllObjects]; 

            [_tblObj setContentOffset:CGPointMake(0, 0)]; 

            int count_notification = [[responseDict valueForKey:@"count_notification"] intValue]; 
            int count_friend_notification = [[responseDict valueForKey:@"count_friend_notification"] intValue]; 

            if (count_notification>0) 
            { 
             [_lblNotification_count setText:[NSString stringWithFormat:@"%@ ",[responseDict valueForKey:@"count_notification"]]]; 
             [_lblNotification_count setHidden:NO]; 
            } 
            else 
            { 
             [_lblNotification_count setHidden:YES]; 
            } 

            if (count_friend_notification>0) 
            { 
             [_lblFriendReq_count setText:[NSString stringWithFormat:@"%@ ",[responseDict valueForKey:@"count_friend_notification"]]]; 
             [_lblFriendReq_count setHidden:NO]; 
            } 
            else 
            { 
             [_lblFriendReq_count setHidden:YES]; 
            } 

            NSString *s1=[NSString stringWithFormat:@"%@",[responseDict valueForKey:@"success"]]; 
            //NSString *s2=[NSString stringWithFormat:@"%@",[responseDict valueForKey:@"msg"]]; 

            if ([s1 isEqualToString:@"1"]) 
            { 
             [_imgNoData setHidden:YES]; 

             NSMutableArray *arrResult=[responseDict objectForKey:@"result"]; 

             for (int i=0; i<[arrResult count]; i++) 
             { 
              NSDictionary *ResultDisc=[arrResult objectAtIndex:i]; 

              [album_id addObject:[NSString stringWithFormat:@"%@",[ResultDisc valueForKey:@"album_id"]]]; 
              [user_name addObject:[NSString stringWithFormat:@"%@",[ResultDisc valueForKey:@"user_name"]]]; 
              [share_name addObject:[NSString stringWithFormat:@"%@",[ResultDisc valueForKey:@"title"]]]; 
              [photo_name addObject:[NSString stringWithFormat:@"%@",[ResultDisc valueForKey:@"user_image"]]]; 
              [likes addObject:[NSString stringWithFormat:@"%@",[ResultDisc valueForKey:@"total_likes"]]]; 
              [is_like addObject:[NSString stringWithFormat:@"%@",[ResultDisc valueForKey:@"is_like"]]]; 
              [arrPhotoDetail addObject:[ResultDisc valueForKey:@"images"]]; 
              [date_time addObject:[NSString stringWithFormat:@"%@",[ResultDisc valueForKey:@"datetime1"]]]; 

              //images 
              NSArray *arrAns = [ResultDisc valueForKey:@"images"]; 
              NSMutableArray *arr = [[NSMutableArray alloc]init]; 
              //imagesarr 
              for (int i=0; i<arrAns.count; i++) 
              { 
               [arr addObject:[[arrAns objectAtIndex:i] valueForKey:@"photo_title"]]; 
               [Owner_id addObject:[NSString stringWithFormat:@"%@",[arrAns valueForKey:@"owner_id"]]]; 
               [photo_id addObject:[NSString stringWithFormat:@"%@",[arrAns valueForKey:@"photo_id"]]]; 
              } 
              [imagesarr addObject:arr]; 
              if([ResultDisc objectForKey:@"reviews"] != nil && [[ResultDisc objectForKey:@"reviews"] count] > 0) { 
               [review addObject:[[ResultDisc objectForKey:@"reviews"] objectAtIndex:0]]; 
              } 
              else { 
               [review addObject:@""]; 
              } 
             } 
            } 
            else 
            { 
             [_imgNoData setHidden:NO]; 
            } 
            [_tblObj reloadData]; 

           } 
            failure:^(AFHTTPRequestOperation *operation, NSError *error) 
           { 
            __weak Home *weakSelf = self; 
            [weakSelf.tblObj.pullToRefreshView stopAnimating]; 
            [weakSelf.tblObj.infiniteScrollingView stopAnimating]; 

            [MBProgressHUD hideHUDForView:[[[UIApplication sharedApplication] delegate] window] animated:YES]; 
            [Utilities displayAlertWithTitle:@"Network Error" andMessage:@"" forView:self]; 
           }]; 
[op start]; 

}

0

게으른 로딩을 시도 계산 더 나은 독서를 위해 서식을 지정했습니다. 공백을 제거하십시오.