2017-10-12 8 views
0

エラーが発生したあと、ajax urlでjsonリクエストを渡すとエラーが発生します。私はajaxで200以上のデータを渡しました。すべての私のデータの "/検索/ searchendpoint" URLから来JSON値をAJAX URLに渡すとエラーが発生する

コントローラ:

$searchitem = $this->MbPriceList->find('all' , [ 
    'fields' => [ 
    'id', 
    'name' => 't1.item_name' 
    ], 
    'join' => [ 
    'table' => 'mb_item_list', 
    'alias' => 't1', 
    'type' => 'INNER', 
    'conditions' => [ 
     't1.item_code = MbPriceList.item_code' 
    ] 
    ] 
]) ->toArray(); 

$this->set([ 
    'response' => $searchitem, 
    '_serialize' => ['response'] 
]); 

JSON要求:

<script> 
    var myUrl = "/search/searchendpoint"; 
    $.mockjax({ 
    url: myUrl, 
    dataType: "json",    
    type: "get", 
    data: JSON.stringify(myUrl), 
    contentType: 'application/json; charset=utf-8', 
    response: function(data){ 
     alert(data) 
    } 
    }); 
</script> 
<script> 
    $('#search').typeahead({ 
    ajax: '/search/searchendpoint' 
    }); 
</script> 

エラー:

jquery-2.2.4.min.js:2 Uncaught TypeError: Cannot use 'in' operator to
search for 'length' in "/search/searchendpoint" at s
(jquery-2.2.4.min.js:2) at Function.each (jquery-2.2.4.min.js:2) at
isMockDataEqual (jquery.mockjax.js:67) at getMockForRequest
(jquery.mockjax.js:119) at Function.handleAjax [as ajax]
(jquery.mockjax.js:444) at Typeahead.execute
(bootstrap-typeahead.js:170) at f (jquery-2.2.4.min.js:2)

+0

あなたの応答データが先読みが期待しているフォーマットではないと思います。実際のJSONがコントローラによってどのように生成されているかを確認すると便利です。また、どこにmockjaxが入りますか?あなたは実際のコントローラをテストしていますか?そうではありませんか? – ADyson

+0

はい私はすでにコントローラをテストしています.jsonの値は正しく表示されます – ganesh

+0

実際のコードの代わりにmockjaxを使用すると、この結果が発生しますか?その場合、なぜコントローラコードを表示しましたか?あなたがAjaxコールを嘲笑しているなら、それは使用されません。あなたのモックジャックスの定義にはモック結果オブジェクトが欠けているようですが、おそらくそれが問題です。 – ADyson

答えて

0

はこれを試してみてください。ビューへの応答として渡すことを意図した変数をJSONとしてエコーしてから、非常に重要ですが、コントローラのコードを終了する必要があります。

$this->set(['response' => $searchitem,'_serialize' => ['response']]); 
echo json_encode('response'); 
exit(); 

とあなたのJavaScriptで、あなたはこれを試して、成功関数のパラメータとしてPHPの変数をキャッチあなたはjqueryのを使用していると仮定し、そのJSONを読まなければなりません。

$ajax({ 
    type:"POST", 
    data:data, 
    url:URL, 

    success:function(data){ 
     var jsresponse = $.parseJSON(data).response; 
    } 
}); 

それがうまくいけば教えてください。 Cheerios !!

関連する問題