#php #html #jquery
#php #HTML #jquery
Вопрос:
Я пытаюсь опубликовать данные для заполнения моих выпадающих списков HTML, используя jQuery $.post, как показано ниже.
var county = $("#county");
var constituency = $("#constituency");
var ward = $("#ward");
populate_fields();
$('select[name="political"]').change(function(ev) {
ev.preventDefault();
populate_fields();
});
function populate_fields() {
// call the server side script, and on completion, update all dropdown lists with the received values.
county.html('').append($('<option>').text('Please choose a county'));
constituency.html('').append($('<option>').text('Please choose a constituency'));
ward.html('').append($('<option>').text('Please choose a ward'));
var data = {
// pass all the currently selected values to the server side script.
"county" : county.val(),
"constituency" : constituency.val(),
"ward" : ward.val()
}
$.post('php/dropdown.php', data, function (resp) {
console.log('function works');
all_values = resp;
$.each(all_values.county, function () {
$option = $("<option>").text(this).val(this);
if (all_values.current_county == this) {
$option.attr('selected', 'selected');
}
county.append($option);
});
$.each(all_values.constituency, function () {
$option = $("<option>").text(this).val(this);
if (all_values.current_constituency == this) {
$option.attr('selected', 'selected');
}
constituency.append($option);
});
$.each(all_values.ward, function () {
$option = $("<option>").text(this).val(this);
if (all_values.current_ward == this) {
$option.attr('selected', 'selected');
}
ward.append($option);
});
},'json');
}
файл php, на который ссылаются, работает отлично, однако post не получает данные из этого файла, и функция не выполняется, я проследил проблему в приведенном выше фрагменте кода. У кого-нибудь есть идея относительно того, в чем может быть проблема?
Вот мой php-код, запрошенный для более глубокого понимания проблемы:
<?php
// read the CSV file in the $makes_models_years array
$makes_models_years = array();
//$uploads_folder = wp_upload_dir()['basedir'];
$file = fopen("./resources/polling_data.csv","r");
$firstline = true;
while (($line = fgetcsv($file)) !== FALSE) {
if ($firstline) {
$firstline = false;
continue;
}
$makes_models_years[$line[0]][$line[1]][] = $line[2];
}
fclose($file);
// setup the initial array that will be returned to the the client side script as a JSON object.
$return_array = array(
'county' => array_keys($makes_models_years),
'constituency' => array(),
'ward' => array(),
'current_county' => false,
'current_constituency' => false
);
// print_r($return_array);
// collect the posted values from the submitted form
$make = key_exists('county', $_POST) ? $_POST['county'] : false;
$model = key_exists('constituency', $_POST) ? $_POST['constituency'] : false;
$year = key_exists('ward', $_POST) ? $_POST['ward'] : false;
// populate the $return_array with the necessary values
if ($make) {
$return_array['current_county'] = $make;
$return_array['constituency'] = array_keys($makes_models_years[$make]);
if ($model) {
$return_array['current_constituency'] = $model;
$return_array['ward'] = $makes_models_years[$make][$model];
if ($year) {
$return_array['current_ward'] = $year;
}
}
}
// encode the $return_array as a JSON object and echo it
echo json_encode($return_array);
print_r($return_array);
die();
?>
Комментарии:
1. Посмотрите на вкладку network инструментов разработчика браузера, проверьте, какой код состояния возвращает запрос и какое содержимое
2. «if (all_values.current_county == this)» — что вы ожидаете от этого?
3. Удалите весь код в обратном вызове, кроме первой строки — вы получаете эту первую строку?
4. @freedomn-m Я ничего не получаю, кажется, что функция в $.post вообще не вызывается
5. Проверьте
$.post
, чтобы$.ajax({ method: "POST", url: 'php/dropdown.php', data: data, error: function(jqXHR, textStatus, errorThrown) { console.log(textStatus, errorThrown); } })
Ответ №1:
Я понял, что проблема заключалась в том, что post не смог прочитать данные, возвращаемые файлом php. Я решил это, поместив файл php в тот же каталог, что и файл javascript, по-видимому, они плохо работают при размещении в отдельных папках.
Комментарии:
1. Они отлично работают в отдельных папках, если указан правильный путь.