2013-11-09 81 views
6

我試圖調用我的本地服務器上的api.php(使用MAMP)。 服務器端api.php被調用,但彥博的PHP代碼裏面的內容包含以下錯誤:AFNetworking 2.0 POST問題,可可錯誤3840(JSON文本沒有開始數組...)

Error Domain = NSCocoaErrorDomain Code = 3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (JSON text did not start with array or object and option to allow fragments not set.) UserInfo = 0x15d7bdd0 {NSDebugDescription = JSON text did not start with array or object and option to allow fragments not set.} 

我的應用程序,是試圖將api.php是一款iOS發送JSON POST請求使用AFNetworking 2

應用這是我的請求代碼:

- (void)postUpdateRequest 
{ 
    if (!dataModel) 
     dataModel = [[DataModel alloc] init]; 

    NSDictionary *params = @{@"foo": @"bar2"}; 

    NSLog(@"%@",params); 

/* NSDictionary *params = @{@"cmd":@"update", 
          @"user_id":[dataModel userId], 
          @"token":[dataModel deviceToken] 
          };//@"ip_address":[dataModel getIPAddress]};*/ 

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
// manager.requestSerializer = [AFJSONRequestSerializer serializer]; 

    [manager POST:ServerApiURL parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) { 
     NSLog(@"JSON: %@", responseObject); 
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
     NSLog(@"Error: %@", error); 
    }]; 
} 

我找遍了整個互聯網,但找不到我的特定問題的答案。 無論我做什麼,我都會得到同樣的錯誤。

爲什麼我的JSON格式不正確?我似乎也無法找到一種方法來嗅探我實際發送的JSON。

謝謝。

+0

1)是什麼讓你確定你發送JSON數據? (實際上,你沒有)。 2)你期望服務器返回什麼? (可能不是你所期望的)3)導致錯誤的代碼行在哪裏? – CouchDeveloper

回答

5

當您在示例中使用API​​時,您的HTTP消息將通過使用Content-Type application/x-www-form-urlencoded進行組合。在內部,您的param字典由AFN編碼(儘管不像w3c指定的那樣嚴格正確),並設置爲請求正文。

因爲您沒有指定Accept標頭,服務器可以自由選擇可能的響應數據(如果有)的內容類型。

當您收到回覆時,您需要總是檢查HTTP狀態碼和響應正文(如果有)的內容類型。

很可能,服務器返回一個指示某個問題的狀態碼和一個包含「預期內容類型」(例如,返回text/html)的內容類型爲「錯誤響應」的響應主體。

+0

問題在於我實際上試圖將_POST放入錯誤消息中,但它只是抱怨錯誤格式,我認爲。我做了一些像exitWithError(400,$ _POST);我錯誤地認爲我正在打印_POST內容。 – user1097185

2

您可以在模擬器中運行應用程序或通過共享WiFi連接到Mac的設備上使用像wireshark(http://www.wireshark.org/)這樣的smth,您正在運行whireshark以跟蹤實際的請求和響應。

2

這個工作對我來說:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
    AFJSONRequestSerializer *requestSerializer = [AFJSONRequestSerializer serializer]; 

[requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
    manager.requestSerializer = requestSerializer; 

[manager POST:URLString 
     parameters:params 
      success:^(AFHTTPRequestOperation *operation, id responseObject) { 
       NSLog(@"JSON: %@", responseObject); 
       [MBProgressHUD hideAllHUDsForView:self.view animated:YES]; 
      } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
       NSLog(@"Error: %@", error); 
       [MBProgressHUD hideAllHUDsForView:self.view animated:YES]; 
      }]; 
相關問題