2017-02-09 23 views
0

我有一些頭痛與JSON沒有返回的JSON。我沒有錯誤,只是沒有數據。瀏覽器顯示響應中的數據。JSON不能編碼爲json或UTF-8?

我知道這不返回的JSON因爲AJAX部分設定具體的數據類型使它無法顯示。如果我刪除dataType語句,它將顯示數據。

我打得周圍的連接字符串中的編碼,在查詢,如標題,並在AJAX部分都無濟於事。我的數據庫是UTF-8,general_ci。

AJAX:

$.ajax({ 

      contentType: 'application/json; charset=UTF-8', 
      data: {'career' : $career}, 
      dataType: 'json', 
      url: 'functions.php', 
      success: function(data) { 

       $("careerdata").html(data); 

      }, 

PHP:

if (isset($_GET['career'])) { 

    require_once 'config.php'; 

    $query = $dbconnect->prepare("select * from jobs where Category = :category"); 
    $query->bindParam(':category', $category); 
    $category = $_GET['career']; 
    $query->execute(); 

    $result = $query->fetchAll(PDO::FETCH_ASSOC); 

    echo json_encode($result); 

    $dbconnect = null; 

    return; 

} else { 

    echo 'No career data found.'; 

}; 

連接文件:

try { 

$dbconnect = new PDO("mysql:host=$host;dbname=$database", $user, $pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')); 

$dbconnect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

} 

catch(PDOException $e) { 

echo "Connection failed: " . $e->getMessage(); 

}; 

如果需要任何更多的信息,請讓我知道。

工作頁面爲https://www.shardsmith.com/career.php,實際查詢爲https://www.shardsmith.com/functions.php(但由於GET變量,它不會獨立工作)。

+0

洙....第一個明顯的問題是「你檢查什麼在'$ result'在你的PHP文件」,因爲如果這是空的,則'json_encode($結果);'是要一樣空着。然後當然http://stackoverflow.com/questions/279170/utf-8-all-the-way-through需要在這種情況下閱讀了你。 –

+0

它不是空的,它打印的很好。問題在於AJAX呼叫得到的迴應。無論如何,我最終都是自己想出來的。 –

回答

0

我最終計算出來自己。 json本身很好。在某些時候,我完全忘記了每個循環的鍵值對,以便實際顯示它們。例如:

$.each(data, function(key,value) { 

    var $itemid = value.ItemID; 
    var $db = value.DB; 
    var $job = value.Job; 
    var $recipe = value.Recipe; 
    var $level_range = value.Level_Range; 
    var $level = value.Level; 
    var $grade = value.Grade; 
    var $rarity = value.Rarity; 
    var $complete = value.Complete; 

    $("careerdata table").append("<tr class=\"recipe\" id=\""+$recipe+"\">" 

     +"<td>"+$level+$grade+"</td>" 

     +"<td class=\"icon\"><a href=\"http://na.finalfantasyxiv.com/lodestone/playguide/db/"+$db+"/"+$itemid+"/\" class=\"eorzeadb_link\"><img style=\"background: url(\'/images/items/"+$job+"/"+$itemid+".png\') 0 1px/42px 42px;\" src=\"/images/items/reflection.png\" /></a></td>" 

     +"<td class=\""+$rarity+"\">"+$recipe+"</td>" 

     +"<td><input class=\"complete\" type=\"checkbox\" value=\""+$complete+"\"></td>" 

    +"</tr>"); 

}); 
+0

方便的提示:您可以使用jquery爲您構建整個表格,然後在需要的位置插入值:var row = $(「​​ .. .......); row.id = $ recipe; var cols = $(「td」); $(cols [0])。text($ level + $ grade); $(cols [1] .......等'雖然一個更好的解決方案是使用一個小模板,而不是填寫(大量的jQuery的模板解決方案在那裏) –

0

似乎MySQL(php)客戶端確實承擔了另一種客戶端編碼,而不是UTF-8。您連接到數據庫後,您可以要求使用

$dbhconnect->exec("SET NAMES utf8"); 

直接正確的編碼。

或者,您可以在您的連接配置使用PDO :: MYSQL_ATTR_INIT_COMMAND(見http://php.net/manual/de/ref.pdo-mysql.php):

$dbconnect = new PDO("mysql:host=$host;dbname=$database", $user, 
    $pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')); 

而且要小心選中前端參數:這是一個開放的大門SQL注入。要麼使用一份聲明中這樣的:

$query = $dbconnect->prepare("select * from jobs where Category = :cat"); 
$query->execute(array(':cat' => $_GET['career'])); 

或第一逃脫輸入paramerers:

$cat = $dbhconn->quote($_GET['career']); 
$res = dbhconnect->query("select * form jobs where Category = {$cat}")->fetchAll(); 
+0

這也是我試過,只是再次嘗試的事情之一,既不這些選項的工作。 –

+0

您的SQL可能產生錯誤嗎?您是否在查詢後立即拋出PDO錯誤信息? (例如var_dump($ dbconnect-> errorInfo());) –

+0

並且:爲什麼使用預準備語句,但不使用單個準備好的參數?如果你嘗試使用$ dbhconnect-> query(...) - > fetchAll()來代替呢? –