搜索

首页  >  问答  >  正文

thinkphp - php echo return 返回json数据的问题

今天一直在捣鼓一个jquery autocomplete插件
我是用ajax向后台获取下拉数据,然后蛋疼的来了
先说明一点 我用的是thinkphp框架
首先肯定是要返回json数据
然后我就 return json_encode($end,JSON_UNESCAPED_UNICODE);
结果前端js插件一直报错,大概就是说返回的json数据不合法
然后捣鼓了好长时间我就尝试用 echo json_encode($end,JSON_UNESCAPED_UNICODE);
结果竟然可以了,我也百思不得其解啊,请高手讲解下,东西明明一模一样 一个echo 一个return怎么就有区别了

PHPzPHPz2849 天前810

全部回复(5)我来回复

  • 迷茫

    迷茫2017-04-11 09:43:29

    js回调需要的是值,php必须只有输出json字符串它才能接收到。
    这就是http协议,request发送和response接受的概念。response返回的内容里必须有值。ajax才能获取到。
    而php 原样输出json串的语句有echo 函数有exit()die()
    至于thinkphp里面controller层的return。只是返回给了thinkphp核心controller类。最终如果该controller没有任何输出,response内容为空。

    回复
    0
  • 阿神

    阿神2017-04-11 09:43:29

    SF之前就有类似问题:echo和return的区别
    再说一遍好了:

    return是给PHP程序返回结果的。
    echo才是Ajax的响应。

    回复
    0
  • 黄舟

    黄舟2017-04-11 09:43:29

    真是醉了,楼主看到前端js错误了,就不能顺便看看ajax的返回值吗?到底是什么问题不是一目了然的事情么。

    回复
    0
  • PHP中文网

    PHP中文网2017-04-11 09:43:29

    正确做法应该是

    exit(json_encode($end,JSON_UNESCAPED_UNICODE));

    return是在function里返回的。
    echo是输出到页面的。

    回复
    0
  • PHP中文网

    PHP中文网2017-04-11 09:43:29

    TP有个$this->ajaxReturn();方法,可以直接用。

    回复
    0
  • 取消回复