1

とにかく、私は過去3時間、いくつかのクエリ結果をJSONエンコードしようとしましたが、コードイグナイターで頻繁に実行しますが、機能しません。理由がわかりません。

私はCodeIgniter(最新バージョン)、PHP5を使用しています。

私の3つのファイル。

Material_modelモデル

public function get_types(){
    return $this->db->query("SELECT * FROM material_types ORDER BY type_id")->result_array();
} // end function get_types

public function get_material($name){
    return $this->db->query("SELECT T.name as 'type', M.* FROM material M, material_types T WHERE T.type_id = M.type_id and T.name = '".$name."' ORDER BY M.type_id and M.order")->result_array();
} // end function get_material_all

材料コントローラー

public function get_all(){
    $json['response'] = array('types' => array());
    $json['response']['types'] = $this->material_model->get_types();


    foreach ($json['response']['types'] as $item){
    $name = $item['name'];

    $json['response'][$name] = $this->material_model->get_material($name);          
    }

    $this->load->view('response', $json);
}

応答ビュー

$this->output->set_status_header(200);
$this->output->set_header('Content-type: application/json');
echo json_encode($response);

結果-> http://goethedev.com/iib_ci/index.php/material/get_all/

JSONページの検証に使用するもの-> http://jsonformatter.curiousconcept.com/

結果全体を表示しています。テスト目的で、row_arrayだけに絞り込もうとしました。これは、テーブルmaterial_typesのいくつかのフィールドだけですが、運が悪いので、これも作業中の新しいサーバーです。問題はありそうにありませんが、言及する価値があると思いました。

ありがとう。

4

2 に答える 2

2

指定したURLから返されたjsonは問題なく表示されており、検証も行われます。投稿してから修正したか、ブラウザのキャッシュをクリアする必要がありますか?

アップデート

指定したバリデーターにコードをコピーして貼り付けたところ、コードは正常に検証されていましたが、URLを使用すると失敗します。これは、ブラウザからコピー/貼り付けするときに含まれていない、何か余分な/間違ったものが発生していることを示しています。

それを識別するために私は走りましたcurl http://goethedev.com/iib_ci/index.php/material/get_all/ | less、そしてこれが私が得たものです:

<U+FEFF><U+FEFF><U+FEFF>{"types":[{"type_id":"0","name":"DISCLAIMER","timestamp":"2012-09-08 22:57:27"},

<U+FEFF>バイト順マークを表します。それらが3つあるため、CIプロジェクトの3つのファイルにバイト順マークが含まれているように見えます。PSR2と同様に、PHPコードのバイト順マークを常に無効にすることをお勧めします。編集者には、それらを削除/無効にするオプションが必要です。これを行うと、jsonを解析できるようになります。

于 2012-09-09T22:25:29.647 に答える
1

あなたjsonは元気に見えますが、これを試すこともできます

public function get_all(){
    $response['types'] = $this->material_model->get_types();
    foreach ($response['types'] as $item){
        $response['name'][] = $this->material_model->get_material($item['name']);          
    }
    $this->load->view('response', array($response));
}

クライアント側で試してみてください

xhr.onload = function(e){
    var jsonObject = JSON.parse(xhr.responseText);
    if (jsonObject != null)
    {
        console.log(jsonObject); // see in the console if it prints anything
        Ti.API.info(...); // rest of your code
    }
}

これが役立つ場合

于 2012-09-09T23:03:01.033 に答える