【问题标题】:Error is occur when I pass the JSON value in AJAX url当我在 AJAX url 中传递 JSON 值时发生错误
【发布时间】: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


【解决方案1】:

试试这个。您必须将您打算作为响应传递给您的视图的变量作为 JSON 的响应回显出来,然后,非常重要的是,退出控制器的代码。

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

在你的javascript中你必须读取那个json,假设你使用jquery你捕获你的php变量作为成功函数的参数,试试这个。

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

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

如果这对你有用,请告诉我。 干杯!!

【讨论】:

    猜你喜欢
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多