为什么我在ajax响应开始时得到??

时间:2015-04-30 08:23:00

标签: javascript php ajax json codeigniter

这是我的JavaScript代码:

$('#tags').select2({
tags: true,
tokenSeparators: [','],
createSearchChoice: function (term) {
    return {
        id: $.trim(term),
        text: $.trim(term) + ' (new tag)'
    };
},
ajax: {
    url: '<?php echo site_url('home_page/get_tags');?>',
    dataType: 'json',
    data: function(term, page) {
        return {
            q: term
        };
    },
    results: function(data, page) {
        alert(data);
        return {

            results: data

        };
    }
},

我的控制器:

public function get_tags()
{            
    $data=  $this->common_model->get_tags_list();

    $d = json_encode($data);
    echo $d;
}

我得到的AJAX响应:

  

[{ “TAG_ID”: “1”, “tag_list”: “#遵循”},{ “TAG_ID”: “2”, “tag_list”: “#all_shots” },{ “TAG_ID”: “3”, “tag_list”: “#instago”},{ “TAG_ID”: “4”, “tag_list”: “#风格”},{ “TAG_ID”: “5”,” tag_list “:” #TFLers “},{” TAG_ID “:” 6" , “tag_list”: “#遵循”},{ “TAG_ID”: “7”, “tag_list”: “#all_shots”},{“TAG_ID “:” 8" , “tag_list”: “#instago”},{ “TAG_ID”: “9”, “tag_list”: “#风格”},{ “TAG_ID”: “10”, “tag_list”:“# TFLers “},{” TAG_ID “:” 11" , “tag_list”: “#igers”},{ “TAG_ID”: “12”, “tag_list”: “#女孩”},{ “TAG_ID”: “13” “tag_list”: “#多彩”},{ “TAG_ID”: “14”, “tag_list”: “#自然”},{ “TAG_ID”: “15”, “tag_list”: “#树”},{ “TAG_ID”: “16”, “tag_list”: “#绿色”},{ “TAG_ID”: “17”, “tag_list”: “#skylovers”},{ “TAG_ID”: “18”, “tag_list”: “鞋子”},{ “TAG_ID”: “19”, “tag_list”: “scaper”}]

我想删除这些字符并获取仅从控制器发送的响应,如下所示:

  

[{ “TAG_ID”: “1”, “tag_list”: “#遵循”},{ “TAG_ID”: “2”, “tag_list”: “#all_shots”},{ “TAG_ID”: “3” “tag_list”: “#instago”},{ “TAG_ID”: “4”, “tag_list”: “#风格”},{ “TAG_ID”: “5”, “tag_list”: “#TFLers”},{ “TAG_ID”: “6”, “tag_list”: “#遵循”},{ “TAG_ID”: “7”, “tag_list”: “#all_shots”},{ “TAG_ID”: “8”, “tag_list”: “#instago”},{ “TAG_ID”: “9”, “tag_list”: “#风格”},{ “TAG_ID”: “10”, “tag_list”: “#TFLers”},{ “TAG_ID”:” 11" , “tag_list”: “#igers”},{ “TAG_ID”: “12”, “tag_list”: “#女孩”},{ “TAG_ID”: “13”, “tag_list”: “#五颜六色”} ,{ “TAG_ID”: “14”, “tag_list”: “#性质”},{ “TAG_ID”: “15”, “tag_list”: “#树”},{ “TAG_ID”: “16”,“tag_list “:” #绿色 “},{” TAG_ID “:” 17" , “tag_list”: “#skylovers”},{ “TAG_ID”: “18”, “tag_list”: “鞋”},{ “TAG_ID”: “19”, “tag_list”: “scaper”}]

2 个答案:

答案 0 :(得分:3)

这是因为white spaces。在返回响应之前trim。试试 -

echo trim($d);

<强>更新

这也有帮助,但我不确定输出的原因是因为某些函数正在生成数据而数据可能来自数据库,因此某些字符会被添加到数据中 -

echo trim($a, '�');

尝试 -

$a = "����������<pre class";
echo trim($a, '�');

输出 -

<pre class

答案 1 :(得分:2)

上面的代码没有错。

由于这些字符确实出现了,所以它们在 echo $d之后被添加 - 这可能是由在PHP中全局注册的输出处理程序引起的。

或者在Web服务器中使用的东西(nginx,apache,......?)。

我建议首先检查一下,然后摆弄明显合适的三线。

修改

似乎PHP无处不在的所有内容都被一些HTML标签所包围:

  

使用var_dum($ d)获取此回复����������<pre class='xdebug-var-dump' dir='ltr'><small>string</small> <font color='#cc0000'>'[{&quot ....

这表明 IS 是一个输出处理程序,任何试图通过修改$ d来解决这个问题的解决方案都会/必须失败。

编辑2

你可以试试:

 ....
 ob_end_clean();
 ob_end_clean();  // number of calls depends on number of stacked output handlers,
 echo $d;
 exit(0);