2013-07-12 3 views
1

Я использую виджет автозаполнения JQuery с помощью JSON для анализа данных db, но не работает. Есть много вопросов, подобных моим, но я не смог найти решение. Мой PHP файл с JSON разобранного это:Автозаполнение JQuery dataSource с JSON

Эта ошибка появляется в консоли браузера, в первой строке PHP:

Uncaught SyntaxError: Unexpected token <

Файл PHP peliculas.php

<?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"}]

Это мой сценарий:

$(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-код:

<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, такой как js-файл, в каталоге /resource/public/js. Когда я изменил файл php в новый каталог, и я обновил параметр url в скрипте, он отлично работал.

Вторая проблема была в параметре data:

data: {terms: request.term},, когда я заменил terms с term фильтрация работала хорошо.

+0

Что вы имеете в виду под "не работает." Есть ли ошибки на странице? –

+0

@AndrewWhitaker JSON возвращает штраф, а JS очень похож на пример автозаполнения JQuery. Когда я пишу в ярлык, ничего не появляется. Я не знаю, что не так, возможно, в '$ .ajax (...' или, возможно, чего-то не хватает в PHP ... Спасибо !!! –

ответ

0

Кажется, что он не работает, как ожидалось, потому что запятая отсутствует

label: item.label, 
value: item.value 
+0

Да, вы правы, но результат тот же, когда я писать в текстовом ярлыке ничего не появляется. Спасибо за ответ !! –

+0

Вы можете видеть любое сообщение/предупреждение в консоли. Вы можете попробовать 'console.log ('label =' + item.label + 'value =' + item.value)' и проверить, возвращает ли AJAX'call данные – Yogesh

+0

У меня есть эта ошибка: 'Uncaught SyntaxError: Unexpected token < 'в первой строке php; в '

0

Две вещи, чтобы проверить:

1) Пожалуйста, проверьте ваш редактор, если он автоматически вставляет подпись Юникода (BOM) в ваших файлах. http://www.w3.org/International/questions/qa-byte-order-mark#detect

Вы можете иметь BOM (байты заказ знак) символ в начале вашего файла PHP peliculas.php, что вызывает проблемы на выход.

Быстрое решение для этого, если вы не можете найти настройки для удаления BOM: Копировать - Вставить все содержимое файла PHP в пустой файл в notepad++, и сохраните файл как UTF-8 (Notepad ++ не пишет BOM)

2) добавить заголовок приложения/JSON перед json_encode

header('Content-Type: application/json'); 
echo json_encode($informacion); 
+0

Спасибо за ответ, я сделал то, что вы говорите, но та же ошибка появляется. :( –

Смежные вопросы