2016-07-23 5 views
1

jsonレスポンスにアクセスするときに奇妙な問題に直面しています。JSONレスポンスがクロムコンソールで空です。CodeIgniter

私がURLにアクセス:http://testproject/api/index.php/admin_customers/

JSON応答:

[{"name":'abc'}, {"name":'def'}, "name":'xyz'}] 

しかし、私はjqgridでアヤックスから同じことをしようとすると、私はすべてのデータを受信して​​いないが。

私のコントローラコード:

class Api extends CI_Controller { 
    public function admin_customers(){ 
    $query = "select * from customer"; 
    $rows = $this->db->query($query); 
    $array_rows = $rows->result(); 
    $json_data = json_encode($array_rows); 
    header('Content-Type: application/json'); 
    echo $json_data; 
    } 
} 

ませ運も後として試みない:コンソールで

return $this->output 
      ->set_content_type('application/json') 
      ->set_status_header(200) 
      ->set_output($json_data); 

出力応答:

enter image description here

マイjQgridのJavaScriptコードがあります:

$("#data-grid").jqGrid({ 
     url:'http://localhost/testproject/index.php/api/admin_customers/', 
     mtype: "GET", 
     datatype: "json", 
     colModel: [ 
      { label: 'Name', name: 'name', key: true, width: 75, editable: true} 
     ], 
     editurl:'http://localhost/testproject/api/admin_customers_edit/', 
     viewrecords: true, 
     height: 250, 
     rowNum: 20, 
     pager: "#jqGridPager" 
    }); 

私は間違っていますか?

jQgridに関係なく、クロムコンソールの応答自体には表示されません。

+0

そして、jsコードはどこですか? –

+1

JavaScriptコードのファイルは**同じ原点ですか**?つまり、「http:// localhost/testproject/index.php/api/admin_customers /」というURLを '' testproject/index.php/api/admin_customers/''のように置き換えることができますか?あなたは[同じ起源](https://en.wikipedia.org/wiki/Same-origin_policy)の問題がある可能性があります。 – Oleg

+0

はい、同じドメインのものです。私はすべての私のプロジェクトフォルダを別のフォルダにコピーして、http:// localhost/testproject-api/api/admin_customersを使ってレストコールを試してみましたが、http:// localhost/testproject /を使っていますが、見た。 localhostのためですか?この状況をどう扱うか。他の選択肢がないので、すべてのファイルを同じドメインから提供する必要があります – Mithun

答えて

0

@Olegは儀式で、クロスオリジンスクリプトエラーです。だから私は最終的には以下のように余分なヘッダーの内容を送信することにより、クロスオリジン・スクリプティングを可能にすることにより、それを行うために管理:

public function admin_customers(){ 
     $query = "select * from customer"; 
     $rows = $this->db->query($query); 
     $data = $rows->result(); 
     header('Content-type: application/json'); 
     header("Access-Control-Allow-Origin: *"); 
     header("Access-Control-Allow-Methods: GET"); 
     header("Access-Control-Allow-Methods: GET, OPTIONS"); 
     header("Access-Control-Allow-Headers: Content-Type, Content-Length, Accept-Encoding"); 
     echo json_encode($data, JSON_NUMERIC_CHECK); 
    } 

これは:)最後に

を私の問題を解決しました。しかし、これはセキュリティ上の問題です。もし私が間違っていないなら、私たちはここでもトークンを承認しなければなりません。