#javascript #php #jquery #ajax #multidimensional-array
#javascript #php #jquery #ajax #многомерный массив
Вопрос:
Я получаю именно то, что мне нужно, из моего PHP-кода и запроса; за исключением того, что мне действительно сложно перенести эти данные во внешний интерфейс, чтобы заполнить выпадающий список HTML.
Вот что у меня есть на стороне PHP; все работает нормально
$app->get('/dlteopt', function ($request, $response, $args) {
$which = $_GET['id'];
if ($which) {
if ($which == 'table_1'){
$sql = "SELECT item1 FROM daya.blahblah";
} else if ($which == 'table_2'){
$sql = "SELECT item2 FROM daya.blahblah2";
} else if ($which == 'table_3'){
$sql = "SELECT item3 FROM daya.blahblah3";
}
$stid = oci_parse($this->db, $sql);
$list = array();
while ($list = oci_fetch_array($stid, OCI_ASSOC)) {
$list[] = $list;
var_dump($list); // this outputs the correct array I need, but cant bring it to front correctly into dropdown
}
if (!@oci_execute($stid)) {
$error = oci_error($stid);
throw new Exception($error['message']);
}
oci_execute($stid);
}
Вот jQuery; журнал response
консоли — это только переменная flag ( which
), которую я отправляю с get
запросом, который определяет, какую таблицу запрашивать через пользовательский сценарий. нужный мне массив пропущен…
let which = $(frm).attr("id");
$.get('dlteopt', {id: which }, function (response) {
console.log(response); // this just consoles as the $which var no array
$.each(response, function(index, value) {
// started logic to append values in option; but no array or obj found/brought in to iterate through, can handle this part if can get array
});
});
выпадающий список html; просто стандартный HTML select с заполнителем, пока не будет заполнен:
<select name='agent' id='agent'><option>Loading...</option></select>
что я здесь делаю не так?или отсутствует / забыл?
Обновление: я застрял на ошибке во внешнем интерфейсе, ниже приведены console.log(response)
результаты, выполняемые в моем $.get
. Данные в журнале ошибок верны; Я просто не могу получить к нему правильный доступ… Проблема с 2D-массивом?
jquery.js:502 Uncaught TypeError: Cannot use 'in' operator to search for
'length' in ......
array(2) {
["OSF_ID"]=>
string(8) "FAI-FSDO"
[0]=>
array(1) {
["OSF_ID"]=>
string(8) "FAI-FSDO"
}
}
array(2) {
["OSF_ID"]=>
string(8) "SAC-FSDO"
[0]=>
array(1) {
["OSF_ID"]=>
string(8) "SAC-FSDO"
}
} ..... etc
Комментарии:
1. Пожалуйста, приведите пример полезной нагрузки ответа. Что отправляется обратно в запрос GET jQuery?
2. jQuery => php Я просто отправляю which var, который определяет, какую таблицу пинговать; параметры 1/3 таблицы
3. Да, я понимаю, что вы отправляете
which
переменную. Я спрашиваю о том, что вы видитеresponse
. Пожалуйста, используйте консоль и сетевую консоль для просмотра ответа и полезной нагрузки. Если вы не получили массив или объект, значит, что-то не так в вашем PHP.4. Я подозреваю, что проблема в
var_dump($list);
том, что это предоставит текст, а не содержимое в формате JSON, которое может интерпретировать JS / jQuery.5.
var_dump()
не предназначен для использования таким образом. Пожалуйста, посмотрите ответ, который я опубликовал.
Ответ №1:
Рассмотрим следующий PHP.
public function process($which) {
if(isset($which)){
if ($which == 'a_table1'){
$sql = "SELECT a_table1 FROM data.blah1";
} else if ($which == 'a_table2'){
$sql = "SELECT a_table2 FROM data.blah2";
} else if ($which == 'a_table3'){
$sql = "SELECT a_table3 FROM data.blah3";
}
$stid = oci_parse($this->db, $sql);
oci_execute($stid);
if (!@oci_execute($stid)) {
$error = oci_error($stid);
throw new Exception($error['message']);
}
$myData = array();
while ($list = oci_fetch_array($stid, OCI_ASSOC)) {
array_push($myData, $list);
}
header('Content-Type: application/json');
echo json_encode($myData);
} else {
header('Content-Type: application/json');
echo json_encode(array("error" => "WHICH not assigned"));
}
}
Затем это должно отправить обратно JSON-данные массива.
Пример
[{
"A_ID":"OJC-FCT"
},{
"A_ID":"DAL-ATCT"
},{
"A_ID":"AFF-MIL-TWR"
},{
"A_ID":"CNO-ATCT"
},{
"A_ID":"GSN-FCT"
},{
"A_ID":"CGI-NFCT"
},{
"A_ID":"NDZ-MIL-TWR"
},{
"A_ID":"FCS-MIL-TWR"
},{
"A_ID":"LAL-FCT"
},{
"A_ID":"LNK-ATCT"
},{
"A_ID":"CHD-FCT"
},{
"A_ID":"FLG-FCT"
},{
"A_ID":"MCN-FCT"
},{
"A_ID":"SKA-MIL-TWR"
}];
Затем вы можете использовать это в каждом цикле для создания параметров.
var which = $(frm).attr("id");
$.get('dlteopt', {id: which }, function (response) {
console.log(response);
$("#agent").html("");
$.each(response, function(index, value) {
$("<option>").html(value['A_ID']).appendTo($("#agent"));
});
});
Вы также можете упростить вывод PHP, чтобы это был просто результирующий массив элементов.
$myData = array();
while ($list = oci_fetch_array($stid, OCI_ASSOC)) {
array_push($myData, $list['A_ID']);
}
Тогда ваш цикл также будет упрощен.
$("#agent").html("");
$.each(response, function(index, value) {
$("<option>").html(value).appendTo($("#agent"));
});
Комментарии:
1. Спасибо.. итак, теперь он появляется с этим, моя переменная $which не публикуется.. так что, увы, он никогда не попадает в запрос.. какие консоли подходят прямо перед $.get на стороне jQuery … странно..
2. консоли на интерфейсе; но в PHP $который возвращается как ‘false’. т.е. $which = $_GET[‘id’]; var_dump($which);
3. @TerryHall что-то не имеет смысла. Можете ли вы вставить свой PHP-код и ссылку на него.
4. @TerryHall звучит так, как будто вы все еще выводите что-то другое, кроме JSON. Опять же, пожалуйста, скопируйте / вставьте свой PHP-код в PasteBin и включите его в свой ответ.
5. @TerryHall похоже, что результат лучше. Теперь вам просто нужно обновить свой цикл для обработки более сложных данных. Через мгновение у вас будет обновление.