首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用JSON自动完成Jquery dataSource

用JSON自动完成Jquery dataSource
EN

Stack Overflow用户
提问于 2013-07-12 16:48:13
回答 2查看 4K关注 0票数 1

我正在使用JQuery的自动完成小部件,使用JSON解析db信息,但不起作用。有很多像我这样的问题,但我一直未能找到解决办法。解析了JSON的php文件如下:

此错误出现在浏览器控制台的php的第一行中:

Uncaught SyntaxError: Unexpected token <

php文件peliculas.php

代码语言:javascript
复制
<?php

    function makeSqlConnection()
    {
        $SERVIDOR_MYSQL = "localhost";
        $BASE_DATOS = "db";
        $USUARIO_MYSQL = "root";
        $PASSWORD_MYSQL = "";

        $con = mysql_connect($SERVIDOR_MYSQL,$USUARIO_MYSQL,$PASSWORD_MYSQL) or die(mysql_error()); 
        mysql_select_db($BASE_DATOS,$con) or die(mysql_error());
        return $con;
    }

    function disconnectSqlConnection($con)
    {
        mysql_close($con);
    }

    $con = makeSqlConnection();

    $term = trim(strip_tags($_GET['term']));
    $result = mysql_query("SELECT PYS_STR, PYS_TITULO FROM pys WHERE PYS_STR LIKE '%".$term."%';", $con);

    $informacion = array();

    while($row = mysql_fetch_assoc($result))
    {
        array_push($informacion, array('label' => $row['PYS_TITULO'], 'value' => $row['PYS_STR']));
    }

    echo json_encode($informacion);
?>

JSON返回以下内容:[{"label":"Reservoir Dogs","value":"reservoirdogs"},{"label":"Machete","value":"machete"},{"label":"Wall Street","value":"wallstreet"},{"label":"Django Desencadenado","value":"djangodesencadenado"},{"label":"The Wire","value":"thewire"},{"label":"This Is England '88","value":"thisisengland88"}]

这是我的剧本:

代码语言:javascript
复制
$(function() {    
        $( "#peliculas" ).autocomplete({
            source: function( request, response ) {
                $.ajax({
                    url: "/bundles/pys/php/peliculas.php",
                    dataType: "json",
                    data: {terms: request.term},
                    success: function( data ) {
                        response( $.map( data, function( item ) {
                            return {
                                label: item.label,
                                value: item.value
                            }
                        }));
                    }
                });
            },
            minLength: 2,
            select: function( event, ui ) {
                log( ui.item ?
                    "Selected: " + ui.item.label :
                    "Nothing selected, input was " + this.value);
            },
            open: function() {
                $( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" );
            },
            close: function() {
                $( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
            }
        });
    });

这是我的html代码:

代码语言:javascript
复制
<div class="ui-widget">
  <label for="peliculas">Peliculas: </label>
  <input id="peliculas" />
</div>

<div class="ui-widget" style="margin-top: 2em; font-family: Arial;">
  Result:
  <div id="log" style="height: 200px; width: 300px; overflow: auto;" class="ui-widget-content"></div>
</div>

解决方案

我已经解决了错误。问题在peliculas.php的位置;Symfony2检测到这个php文件就像/resource/public/js目录中的js文件一样。当我将php文件更改为一个新目录并更新了脚本中的url参数时,它就正常工作了。

第二个问题是data参数:

data: {terms: request.term},当我用term代替terms时,过滤工作得很好。

EN

回答 2

Stack Overflow用户

发布于 2013-07-12 18:50:21

由于缺少逗号,它似乎无法正常工作。

代码语言:javascript
复制
label: item.label,
value: item.value
票数 0
EN

Stack Overflow用户

发布于 2013-07-13 12:47:14

有两件事需要检查:

1)如果编辑器自动在您的文件中插入Unicode签名(BOM),请检查它。http://www.w3.org/International/questions/qa-byte-order-mark#detect

您可能在php文件peliculas.php的开头有一个BOM (字节顺序标记)字符,这会导致输出出现问题。

如果找不到删除BOM的设置,请快速修复:将php文件的所有内容复制到http://notepad-plus-plus.org/中的空文件中,并将文件保存为UTF-8 (notepad++不写BOM)。

2)在json_encode之前添加应用程序/json头

代码语言:javascript
复制
header('Content-Type: application/json');
echo json_encode($informacion);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17619940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档