0

データベースから最新の情報を取得できるように、getJSONを使用しようとしています。私がこれまでに行ったことは、それを配列とに格納することjson_encode(the array)です。ビューで情報を見ることができるのでそれは機能しますが、問題はajaxメソッドがそれを取得しないことです。多分私は本当に愚かな何かを逃しています。

コントローラ:

public function insertJSON()
{
    $this->load->model("values");
    $queryresults = $this->values->getDb(); 
    $arr = array();

    foreach($queryresults as $row)
    {
        $arr[] =  $row->postcode;
    }

    $data['arr'] = $arr;    
    echo json_encode($arr); 
    $this->load->view('answer', $data);

}

意見:

<html>
<head>
    <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
    <script>
    <script>            
        $.post('/localhost/codeigniter/index.php/welcome/insertJSON', function(data) {
            alert(data);
        });
    </script>
    </script>
</head>
<body>
</body>
</html>

$ arr変数のVarダンプ:

array(4) {
  [0]=>
  string(5) "test1"
  [1]=>
  string(5) "test2."
  [2]=>
  string(5) "test3"
  [3]=>
  string(5) "test4"
}
4

3 に答える 3

1

$data配列 ( を含む$arr) を ( ) を呼び出してビューに送信し、その$this->load->view('answer', $data);直前に JSON データをエコーし​​ます。

したがって、html または javascript がエンコードされた json を含むプレーン テキストを持つ前に、その上にあるビューを呼び出します$arr

これは明らかに間違っており、探しているものではありません。

次のいずれかのオプションを実行する必要があります。

  1. タグ内の > セクション$arrで、ビューでエコーします。ただし、AJAX 呼び出しを使用する必要はありません。 <head<script>
  2. コントローラーでエコーするだけ $arrで、その後にビューを呼び出さないでください。おそらく、これのために別のコントローラーを作成する必要があります。1 つはエコーし$arr、もう 1 つはビューを呼び出します。このようにして、最初のコントローラーへの AJAX 呼び出しを行うことができます。
  3. $arrJSON でエンコードされたデータをエコーするだけのビューに を渡します。これはオプション #2 に似ていますが、データを表示するためにビューを使用し、コントローラーではなくビューを使用します。これは、MVC パターンに従う最も適切な方法です。コントローラーは何もエコーしません。

オプション#3に従うことをお勧めします。

于 2013-03-18T00:41:23.977 に答える
1

そう。ajax を使用して取得できる JSON オブジェクトをエコー出力する場合は、ページの出力 MIME タイプが JSON データを提供できることを確認する必要があります。

また、関数から必要なjsonデータを使用して、他のものをエコーできないことにも注意してください。あなたのコードでわかるように、jsonをエコーし​​てからビューをロードしてください!それを2つの別々のページに分割する必要があります

修理:

public function _JSON()
{
    $this->load->model("values");
    $queryresults = $this->values->getDb();

    $arr = array();

    foreach($queryresults as $row)
    {
       $arr[] =  $row->postcode;
    }

    return $arr;

}


public function json_body(){
    $this->load->view('answer',array('data'=>$this->_JSON()));
}


public function getJSON(){
    $this->output
    ->set_content_type('application/json')
    ->set_output(json_encode($this->_JSON()));
}
///note that $this->_JSON() now return ur $arr so u can use it in many methods.

今すぐページをロードするには、「必要に応じて名前を変更する」に行くことができ/json_body、jsは

<script>
$.post('<?=base_url('welcome/getJSON')?>', function(data) {
alert(data);
});
</script>
<!--notice that base_url show echo out ur url base on ur config.php file-->

ノート:

function getJson get CI Output クラスの機能を使用して、ページの MIME タイプを設定し、この配列が唯一の出力であることを確認します。これは必須ではありませんが、ベスト プラクティスにすぎません。必要に応じて、3行すべてをシンプルに置き換えることができecho json_encode($this->_JSON());、それも機能します!

于 2013-03-18T00:41:41.413 に答える
0

問題はあなたの投稿URLだと思います:

$.post('//localhost/codeigniter/index.php/welcome/insertJSON', function(data) {
   alert(data);
 });

ダブルスラッシュを逃した (//)

于 2013-03-18T00:23:17.660 に答える