2017-02-09 9 views
0

JSONがJSONとして返されないという頭痛があります。私はエラーがなく、データはまったくありません。ブラウザは応答のデータを表示します。jsonやUTF-8としてエンコードされていないJSONですか?

AJAXセクションにdataTypeを設定すると、何も表示されないため、JSONとして返されません。 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

スヨン....最初の明白な疑問は、それが空の場合は、その後、 'json_encode($結果)ので、「あなたは、PHPファイル内の' $のresult'に何があるか確認しなかった」である; 'しようとしていますちょうど空である。もちろん、この場合は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 = $(" tr class = 'recipe'>​​ .. ($ level + $ grade); $(cols [1]); $(cols [0]); ....... 'などです。さらに良い解決策は、代わりに小さなテンプレートを使用して、そこにjquery用のテンプレートソリューションをたくさん入れるだけですが、 –

0

MySQL(php)クライアントは、UTF-8以外の別のクライアントエンコーディングを想定しているようです。あなたは、データベースに接続した後、あなたは直接

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

を使用して、正しいエンコーディングを要求することができます。

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

をそして未確認のフロントエンドパラメータに注意してください:

また、あなたは、接続の設定にPDO :: MYSQL_ATTR_INIT_COMMANDを(http://php.net/manual/de/ref.pdo-mysql.phpを参照)を使用することができ、これは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

これは私が試したことの1つで、もう一度試してみましたが、どちらのオプションも機能しません。 –

+0

SQLでエラーが発生する可能性はありますか?あなたは、クエリの直後にPDOのエラー情報をダンプしようとしましたか? (例:var_dump($ dbconnect-> errorInfo());) –

+0

And:プリペアドステートメントを使用していますが、準備された単一のパラメータを使用していないのはなぜですか?代わりに$ dbhconnect-> query(...) - > fetchAll()を試すとどうなりますか? –

関連する問題