0

サーバーに ajax リクエストを送信し、json レスポンスを受け取りたいのですが、代わりに html レスポンスを受け取ります。このコードの何が問題なのですか?

//jquery code

$('select[name=category]').click(function(){
    $.ajax({
    url: "/index.php/category/get_categories",
    type: "post",  
    dataType: "json",
    cache: false,      
    success: function (result) { 
        var arr = jquery.parseJSON(result);
        alert(arr);
        }      
    });
});

//php code

public function get_categories(){
    $data = $this->category_model->get_cats_names_ids();
    echo json_encode($data);
}

応答は json オブジェクトではなく html ページであり、アラート ボックスは表示されません。dataType:"json" を削除すると、アラート ボックスが表示され、html ページが含まれます。 「var arr = jquery.parseJSON(result);」の後のコード 動作しません。alert("こんにちは"); !

4

3 に答える 3

3

これで問題が完全に解決するかどうかはわかりませんが (html を生成する表示フックやその他のビュー機構が関係している可能性があります)、ここから始めてください。

ルール 1: コントローラーから何もエコーしないでください。ビューを呼び出すか、 を使用しますoutput::set_output

ルール 2: content-type は常に正しく設定してください。

public function get_categories(){
    $data = $this->category_model->get_cats_names_ids();
    $this->output->set_header('Content-type:application/json');
    $this->output->set_output(json_encode($data));
}
于 2012-12-04T02:22:25.160 に答える
0

フォローしてみてください

$('select[name=category]').click(function()
{
 $.post( '<?php echo site_url('category/get_categories'); ?>', { 'var': 1 },
       function(response) {
       if(response.success)
    {
         var arr = response.message;
                     alert(arr);
    }       
      },"json");


});

 public function get_categories()
 {
    $data = $this->category_model->get_cats_names_ids();
    echo json_encode(array('success'=>true,'message'=>$data));
    //for testing replace above line with
    // echo json_encode(array('success'=>true,'message'=>'Hello!'));
 }
于 2012-12-04T12:18:02.137 に答える
0

モデルにエラーがあるようです。取得したHTML応答はCIエラーメッセージです。

デバッグのためだけに、json_encodeなしで$ dataをエコーし​​てから、URLを介してその関数を直接呼び出します。

于 2012-12-04T10:01:54.467 に答える