2012-07-21 149 views
1

我正在開發一個iPhone應用程序來顯示來自php的數據。從PHP獲取JSON數據到iOS

include_once 'connectionIncl.php'; 

if(function_exists($_GET['method'])){ 
    $_GET['method'](); 

} 
function getSQLIntoJSONFormat() 
{ 
    $arr; 
    $sql = mysql_query("SELECT * FROM pecivo"); 
    while($pecivo = mysql_fetch_assoc($sql)){ 
     $arr[] = $pecivo['typ']; 
    } 
    $arr= json_encode($arr); 
    echo $_GET['jsoncallback'].'('.$arr.')'; 
} 

// --- http://127.0.0.1:8887/TeplyRohlik/pecivo.php?method=getSQLIntoJSONFormat&jsoncallback=? 

當我從瀏覽器運行此,它返回正確的數據:

(["sejra","knir","baba","vousy","sporitelna25"]) 

此外,iOS上有這樣的代碼數據被從MySQL數據庫然後被編碼到JSON格式在PHP文件獲得:

NSString * urlString = [NSString stringWithFormat:@"http://192.168.0.10:8887/TeplyRohlik/pecivo.php?method=getSQLIntoJSONFormat&jsoncallback=?"]; 
NSURL * url = [NSURL URLWithString:urlString]; 
NSData * data = [NSData dataWithContentsOfURL:url]; 
NSError * error; 
NSMutableDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; 
NSLog(@"%@",json); 

而且結果是....(null)。 我不知道如何得到這個工作...

+0

如果可以從您的設備訪問URL,您嘗試過嗎?轉到您的手機瀏覽器,然後鍵入上面的網址,查看它是否正確回答 – RedRoosterMobile 2012-07-21 17:07:39

+0

歡迎來到Stack Overflow!請不要將'mysql_ *'函數用於新代碼。他們不再被維護,社區已經開始[棄用流程](http://goo.gl/KJveJ)。請參閱[**紅框**](http://goo.gl/GPmFd)?相反,您應該瞭解[準備好的語句](http://goo.gl/vn8zQ)並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli的)。如果你不能決定,[本文](http://goo.gl/3gqF9)將有助於選擇。如果你關心學習,[這裏是很好的PDO教程](http://goo.gl/vFWnC)。 – 2012-07-21 17:07:40

+0

爲什麼不看看NSError對象來查找更多信息? o,0 – borrrden 2012-07-21 17:10:28

回答

2

它看起來像你的PHP方法正在吐出JSONP。你可能想要做的是改變這種狀況到:

function getSQLIntoJSONFormat() 
{ 
    $arr; 
    $sql = mysql_query("SELECT * FROM pecivo"); 
    while($pecivo = mysql_fetch_assoc($sql)){ 
     $arr[] = $pecivo['typ']; 
    } 
    $arr= json_encode($arr); 
    echo $arr; 
} 

您所看到的輸出被包裹在括號中,因爲它的預期在請求一個GET參數調用jsoncallback這將使輸出看起來像這樣:

javascriptFunction(["a","b","b"]) 

這不是你想要在你的iOS設備上。你只需要數組的原始JSON字符串,不要在回調函數調用中包裝。

+0

它的工作,非常感謝 – Casper522 2012-07-21 17:29:08