【发布时间】:2017-10-12 07:45:50
【问题描述】:
当我在 ajax url 中传递 json 请求时,会发生以下错误。我已经在 ajax 中传递了 200 及以上的数据。我所有的数据都来自“/search/searchendpoint” 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
在 s
的“/search/searchendpoint”中搜索“长度” (jquery-2.2.4.min.js:2) 在 Function.each (jquery-2.2.4.min.js:2) 在
isMockDataEqual (jquery.mockjax.js:67) 在 getMockForRequest
(jquery.mockjax.js:119) 在 Function.handleAjax [as ajax]
(jquery.mockjax.js:444) 在 Typeahead.execute
(bootstrap-typeahead.js:170) 在 f (jquery-2.2.4.min.js:2)
【问题讨论】:
-
我猜你的响应数据可能不是 typeahead 所期望的格式。查看控制器生成的实际 JSON 会很有帮助。另外,mockjax 是从哪里来的?你是在测试真正的控制器吗?
-
是的,我已经测试了我的控制器.. json 值显示正确
-
那么当使用 mockjax 而不是真实代码时会出现这种结果?在这种情况下,您为什么向我们展示控制器代码?如果你在模拟 ajax 调用,它就不会被使用。您的 mockjax 定义似乎缺少任何类型的模拟结果对象,也许这就是问题所在。
标签: jquery json ajax cakephp mockjax