2013-03-16 3 views
1

У меня есть googled и смотрел на SO какое-то время, и я не могу понять это. Единственное требование, которое я пытаюсь выполнить, - это вернуть правильно отформатированный массив javascript, содержащий результаты оператора sql.PHP В массив Javascript?

I.E.

Учитывая запрос:

SELECT NUMBERS FROM TABLE 

результаты:

NUMBERS 
1 
2 
3 

Я хотел бы, чтобы в конечном итоге получить обратно массив как так

["1","2","3"] 

Пожалуйста, помогите мне понять, где я не соответствует действительности

Вот мой PHP код

<?php 

$mysqli = new mysqli("local.host.com", "user", "pass", "db"); 

$sql = "SELECT DISTINCT NAME FROM table"; 

$result = $mysqli->query($sql); 

while($row = $result->fetch_array()) 
{ 
    $rows[] = $row['NAME']; 
} 

echo(json_encode($rows)); 


$result->close(); 

/* close connection */ 
$mysqli->close(); 
?> 

Вот мой JavaScript:

function GetCards() 
{ 
    var cardarray = new Array(); 

    //alert('test'); 
    $.getJSON('getcardlist.php', function(data) 
    { 
     for(var i=0;i<data.length;i++) 
     { 
      cardarray.push(data[i]); 
     } 

     //return cardarray; 

    }); 

    return cardarray; 
} 

EDIT:

Немного больше информации, Im пытаюсь настроить список автозаполнения для Jquery UI, это моя установка для виджета автозаполнения.

var list = GetCards(); 


$("#name").autocomplete({ 
source: list, 
minLength: 2 

И это ошибка Im получение из хромированной консоли

Uncaught TypeError: Cannot read property 'label' of null 
+2

В чем проблема? Какие ошибки вы получаете? –

+0

Ваш код не имеет ссылки на 'label'. – hjpotter92

+0

? автозаполнение использует список var в качестве источника, список устанавливается с помощью GetCards, который вызывает php-страницу. – Pseudonym

ответ

1

GetCards возвращает пустой массив - который то, что вы переходите к виджету Autocomplete, и заставляя виджет вызывать исключение TypeError. Для того, чтобы передать заполненный массив, переместит код, который инстанцирует подсказки в ваш getJSON успехе обратного вызова (я не уверен, что вам даже не нужно перебрать data - если вам не нужно на самом деле превратить его содержание в некотором роде):

$.getJSON('getcardlist.php', function(data) { 
    $("#name").autocomplete({ 
     source: data, 
     minLength: 2 
    }); 
}); 

В качестве альтернативы рассмотрите возможность использования сокращения Autocomplete для загрузки непосредственно из фида данных (see passing source as a string). Однако для этого подхода может потребоваться дополнительная работа на стороне сервера, чтобы отфильтровать список по типу пользователя - если вы хотите этого поведения.

+0

Я переехал это время назад, но это хороший ответ с соответствующей информацией. – Pseudonym

0

вы должны использовать $.each, чтобы получить данные

$.getJSON('getcardlist.php', function(data) 
{ 
    $.each(data, function(key, val) { 
     cardarray.push(val); 
    }); 
    //return cardarray; 
}); 
+0

Это дало мне ту же ошибку, которую я только что добавил выше – Pseudonym

+1

Код, который вы опубликовали, не связан с вашей ошибкой. Опубликовать соответствующий код. –

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