2014-10-28 129 views
0

我正在向服務器發送數據,它正在響應我的請求,並且在Web中收到如下所示的文本...我的問題在哪裏?NSString* newStr = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];它在responseData中有數據時沒有響應我的NSData。在NSURLConnection中將NSData轉換爲NSString = null

我的響應消息:

{ret:0,msg:"<B>Your request has submitted</B><br/>Your request number is 123 <br/>Have a nice day.<br/>"}

我的代碼:

NSString *link = @"http://example.jsp"; 

NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"first_name=%@&last_name=%@&phone=%@", link, nameField.text, surnameField.text, phoneField.text]]; 

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 

[request setHTTPMethod:@"POST"]; 

NSURLResponse *response; 
NSError *err; 
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err]; 

NSLog(@"responseData: %@", responseData); 

NSString* newStr = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 

NSLog(@"Finish %@", newStr); // newStr is null!! 

UIAlertView *message = [[UIAlertView alloc] initWithTitle:title 
                message:newStr 
               delegate:self 
             cancelButtonTitle:@"OK" 
             otherButtonTitles:nil]; 
[message show]; 
+0

你可以顯示你的網址結果 – 2014-10-28 12:52:49

+0

@ Anbu.Karthik http://example.com/on/form.jsp?first_name=test1&last_name=test2&phone=34252252345但它不會幫助。 – CAN 2014-10-28 13:00:28

+0

你的網址是無效的,這是你沒有得到答案,但編碼是好的,在你的代碼沒有問題,只是檢查你的網址是否有效 – 2014-10-28 13:02:54

回答

0

url變量是因爲你的字符串(first_name=…)可能已經nil做到這一點是不是一個有效的URL:它甚至沒有一計劃和沒有主機。

我敢打賭,如果仔細觀察,Xcode會顯示一條警告,表明您的格式有三個佔位符(%@),但您傳遞了四個參數。你可能真的想要做的是類似的事情;

[NSString stringWithFormat:@"%@?first_name=%@&last_name=%@&phone=%@", link, nameField.text, surnameField.text, phoneField.text] 

(注意:在開始的附加%@?。)

在你提到你收到了數據的註釋(所以你的代碼是隻是一個虛擬的?)。如果你的電話[[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]返回nil這意味着你的responseData是不是UTF-8(這是一個相當壯舉,我從來沒有見過這種方法失敗;我確實得到垃圾回來,但從來沒有nil)。然而,你引用的部分看起來很正常:它解碼爲\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n{ret:0,msg:"<B>Y

+0

感謝您的回答......我只是拍攝了我的鏈接的一部分,實際上這是很長的,這就是爲什麼它看起來錯了。通常我可以在服務器中看到它工作正常。 NSData正在獲取數據,但我無法將其轉換爲NSSting。 – CAN 2014-10-28 14:11:05

+0

@CAN:仔細檢查發送的數據(例如將數據寫入文件或執行網絡跟蹤)。這很可能不是有效的UTF-8。 – DarkDust 2014-10-28 14:19:56

+0

是的,在我將編碼改爲'NSWindowsCP1254StringEncoding'後,它現在正在開火。但是中間有一個很大的空間 – CAN 2014-10-28 14:35:15

-1

你的Alloc responseData? 您可以通過使用委託

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
-(void)connectionDidFinishLoading:(NSURLConnection *)connection 

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
    NSString* newStr = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 

NSLog(@"Finish %@", newStr); // newStr is null!! 

UIAlertView *message = [[UIAlertView alloc] initWithTitle:title 
               message:newStr 
              delegate:self 
            cancelButtonTitle:@"OK" 
            otherButtonTitles:nil]; 
[message show]; 
} 
+0

'responseData'是他對'+ [NSURLConnection sendSynchronousRequest:returningResponse:error: ]'。您引用的委託調用僅用於_asynchronous_連接。 – DarkDust 2014-10-28 13:44:48