当返回的JSON数据中包含换行符时,jQuery UI自动完成功能无法正常工作

时间:2012-08-18 05:30:25

标签: php jquery json jquery-ui autocomplete

我的目标

使用jQuery UI自动填充功能搜索图书,当从建议下拉列表中点击图书时,使用自动填充的select功能填充HTML表单的其余部分,其中包含所选图书的详细信息。 / p>

问题

只要返回的数据不包含换行符(我在数据库中有一个名为description的表字段,并且在存储的数据中有换行符),自动完成就像魅力一样。但是,如果我将description字段数据包含在返回的数组中,则建议下拉列表将无法显示。但是,当使用Firebug进行检查时,将返回数据;只是没有出现

代码

// STORING INFORMATION FROM THE DATABASE
$items[$r['book_id']] = array('name'=>$r['book_name'],
                              'category'=>$r['c_id'],
                              'author'=>$r['book_author'],
                              'vendor'=>$r['book_publisher'],
                              'edition'=>$r['book_edition'],
            Culprit here -->  'description'=>$r['book_description'],
                              'price'=>$r['book_price'],
                              'date'=>$r['date']);



 // DATA FOR POPULATING THE HTML FORM (USING ui.item.<index name>)
   $result = array();
   foreach ($items as $key=>$value)
   {
      array_push($result, array("id"=>$key,
                                "label"=>$key."-".$value['name'],
                                "value" => strip_tags($value['name']),
                                "name" => $value['name'],
                                "cat" => $value['category'],
                                "author" => $value['author'],
                                "vendor" => $value['vendor'],
                                "edition" => $value['edition'],
                                "description" => $value['description'],
                                "price" => $value['price'],
                                "date" => $value['date']));
    }
    // $result is then supplied to a function which converts the data to json

如果我从description$items数组中删除$result条目,则一切都按预期工作。经过SO主题后,我尝试了几件事:

我做了什么

尝试str_replace('\n', '\\n', $r['book_description'])

尝试str_replace('<br />', '\\n', $r['book_description'])

出于沮丧甚至尝试urlencode($r['book_description'])

但他们似乎都没有工作。这个有解决方法吗?

提前致谢。


更新

在返回的集合上使用json_encode会导致:

enter image description here

2 个答案:

答案 0 :(得分:2)

您使用的是json_encode()吗? ..它应该为你逃避一切。你也可以尝试像

这样的东西
$newDesc = str_replace(PHP_EOL, "", $r['book_description']);

$newDesc = str_replace(chr(10), "", $r['book_description']);
$newDesc = str_replace(chr(13), "", $newDesc);

答案 1 :(得分:2)

转义序列(\ n \ r \ n等等...)仅适用于双引号 替换:
    

      str_replace('\n', '\\n', $r['book_description'])
    
对于这个:     
      str_replace("\n", "\\n", $r['book_description'])
    
然后工作

抱歉我的英语不好。