2011-07-26 23 views
0

我正在嘗試連接到網頁並返回一個JSON字符串。這個字符串只需要在JSON中解析並返回到我已經等待的NSArray中。問題是JSON並不總是返回結果。有時候,它運作良好。有時,它返回(null),引用下面的錯誤。Objective-C的JSON返回錯誤「令牌[r]的非法啓動」

self.accounts = nil; // Clear the NSArray 

NSString *post = [NSString stringWithFormat:@"username=%@", username.text]; 
NSData *postData = [NSData dataWithBytes: [post UTF8String] length: [post length]]; 

// Submit login data 
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 
[request setURL:[NSURL URLWithString: @"http://###.#####.###/app/getaccts.php"]]; 
[request setHTTPMethod: @"POST"]; 
[request setValue: @"application/x-www-form-urlencoded" forHTTPHeaderField: @"Content-Type"]; 
[request setHTTPBody: postData]; 

// Retreive server response 
NSURLResponse *response; 
NSError *err; 
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err]; 
NSString *content = [NSString stringWithUTF8String:[returnData bytes]]; 

accounts = [[content JSONValue] allValues]; // Parse JSON string into the array 
NSLog(@"Array: %@", accounts); 

我提交返回此頁:

{"1":"856069060", "2":"856056407"} 

JSON記錄以下錯誤:

-JSONValue failed. Error is: Illegal start of token [r] 

回答

0

我能得到一點點的詳細信息...具體地說,我d像你一樣檢查你的sendSynchronousRequest的返回值,所以你可以做出這個改變並重新運行你的測試:

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err]; 
if (returnData == nil) { 
    NSLog(@"ERROR: %@", err); 
} else { 
    NSLog(@"DATA: %@", returnData); 
} 
+0

好吧,我說什麼你問及returnData返回此: <7b223122 3a223835 36303639 30363022 2c202232 223a2238 35363035 36343037 227D> JSON沒有觸發同樣的錯誤這一次。它表現異常不一致。 – Tanoro

+0

我一分鐘前再試一次,並且returnData返回了您在我上次評論中看到的內容,現在JSON返回「非法開始標記[s]」。我無法弄清楚爲什麼JSON接收數據,但不會解析它。 – Tanoro

+1

很酷,是的,問題是 - [NSString stringWithUTF8String:]需要一個真正的UTF8字符串,你的並不是因爲它不是NULL終止的(因爲returnData沒有用00結束)。確保你添加一個NULL字符到你的字符串的末尾,你應該沒問題。 – pho0

相關問題