2013-07-30 42 views
2

我有一個API,我想使用POST請求作爲JSON文件從它獲取一些數據。從服務器獲取JSON文件時丟失內容

的問題是:我從HTTP請求-before parsing-收到

{ 
    "countryID":"30" 
    "countryName":"Syria" 
}, 

數據是:

{ 
    "countryID":"30" 
    "countryName":"" 
}, 

在服務器這個樣子的

數據沒有像countryName這樣的每個文本字段的值。

HTTP請求是:

‫NSString * post =[NSString stringWithFormat:@"lang=%@",@"English"]; 

NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]; 
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]]; 

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
[request setTimeoutInterval:60]; 

[request setURL:url]; 
[request setHTTPMethod:@"POST"]; 

[request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
[request setHTTPBody:postData]; 

NSURLConnection* connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
[connection start];‬ 

的最後一件事我想提的是,收到的JSON文件中包含這樣的JSON數據之前,一個標題:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 

我的問題

HTTP請求中是否有任何錯誤導致此問題?或者它是服務器端的問題?

編輯

我忘了提,該服務器是一個PHP服務器和請求的URL格式如下的樣子:

https://website.com/api/data.php 
+2

是否有實際的屬性之間缺少逗號? –

+0

你確定服務器發送你的國家名稱?與像查爾斯代理的代理仔細檢查,我發現這個工具在調試客戶端/服務器的問題非常寶貴的。 –

+1

從外觀上看,正在返回一個完整的請求。它沒有格式錯誤,所以很有可能是服務器端問題 – Tim

回答

1

它看起來像你得到的響應有兩個問題:它沒有你期望的內容,而且它的格式是關閉的 - 聽起來響應的HTTP主體同時包含HTML和JSON。

第一個問題是某種應用程序級別的問題;要麼你沒有發送正確的查詢,要麼服務器沒有正確解釋它,或者它有某種其他的錯誤。所以它可能在任何一方。

然而,第二個問題可能是服務器端問題;它沒有回覆一致的迴應。這就是說,你可能能夠督促服務器告訴它明確指出你想要一個JSON響應做正確的事情:

[request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 

取決於服務器,雖然。祝你好運!

+0

關於第二個問題,最近在服務器端解決了問題,並從返回的文件中刪除了HTML頭,現在它是純JSON。 因此,HTTP請求現在只接收JSON文件,我試圖根據您的建議更改請求的值,但我仍然遇到同樣的問題。 – Ghost

0

您是否在調試器中收到任何json錯誤,如Garbage At End錯誤?你使用NSJSONSerialization處理iOS端的JSON嗎?如果您使用NSJSONSerialization的NSJSONReadingAllowFragments選項,會發生什麼情況?

我會發布這個作爲評論,但我是underprivileged。 :(

+0

問題出現在解析步驟之前,並且在解析文件之後沒有任何錯誤,除了文本字段的內容是空的,因爲它是從服務器接收的,因此我不認爲這是解析問題。 – Ghost