функция jquery $.post не выполняет функцию

#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. Они отлично работают в отдельных папках, если указан правильный путь.