Willy Mularto
Willy Mularto

Reputation: 1441

PHP isn't receiving data from a jquery http request

I know this is a very basic Ajax question. I have been searched for all possible answer but none work for me. So here is the situation

This is my HTML code

<div class="form-group">
                        <label class="font-normal">Kota/Kabupaten</label>
                        <div class="input-group text">
                            <select id="frm_provinsi" class="frm_provinsi form-control" name="frm_provinsi">
                                <option></option>
                                <option value="Bahamas">Bahamas</option>
                                <option value="Bahrain">Bahrain</option>
                                <option value="Bangladesh">Bangladesh</option>
                                <option value="Barbados">Barbados</option>
                                <option value="Belarus">Belarus</option>
                                <option value="Belgium">Belgium</option>
                                <option value="Belize">Belize</option>
                                <option value="Benin">Benin</option>
                            </select>
                        </div>
                    </div>

Here is my Ajax code:

$('#frm_provinsi').on('change', function() {
          var nilai = $(this).val();
          console.log(nilai);

          if (nilai !== '') {
            $.post({
              type: 'POST',
              url: 'index.php',
              data: { frm_provinsi: nilai },
              contentType: 'application/x-www-form-urlencoded',
              dataType: 'text',
            })
            .done(function(respon) {
              console.log(respon);
              // Tampilkan hasilnya di halaman web
              $('#hasil').html('Provinsi: ' + respon.nama_provinsi);
            })
            .fail(function(xhr, status, error) {
              console.log(xhr.responseText);
            });
          } else {
            console.log('Nilai tidak boleh kosong');
          }
        });

Here is my PHP code:

var_dump($_REQUEST);

It just empty everytime I change selection on the select field. I can see Ajax sends data via browser debug console. If I manually POST the form the PHP receives all values. Additional info I work under Inspina template. Thanks for any help and response.

Here are some updates I made: Scenario:

Ajax

$('#frm_provinsi').on('change', function() {
          var nilai = $(this).val();
          console.log(nilai);

          if (nilai !== '') {
            event.preventDefault();
            $.post({
              type: 'POST',
              url: '',
              data: $.param({ frm_provinsi: nilai }),
              success: function(respon) {
                  document.getElementById("frm_kota").innerHTML = respon;
              },
              //contentType: 'application/x-www-form-urlencoded',
              cache: false,
            })
            .done(function(respon) {
              console.log(respon);
              // Tampilkan hasilnya di halaman web
              $('#frm_provinsi').html('Provinsi: ' + respon.nama_provinsi);
            })
            .fail(function(xhr, status, error) {
              console.log(xhr.responseText);
            });
          } else {
            console.log('Nilai tidak boleh kosong');
          }
        });

PHP

if (isset($_POST['frm_provinsi'])) {
$smarty->assign('prov', $_REQUEST['frm_provinsi']);
$GetDaftarKota = DB::query("SELECT id_kemendagri, nama_kota FROM `kota` WHERE LEFT(id_kemendagri, 2) = '".$_POST['frm_provinsi']."'");
//print_r ($GetDaftarKota);
$FormData = NULL;
foreach($GetDaftarKota as $me) {
    $FormData .= "<option value=\"".$me['id_kemendagri']."\">".$me['nama_kota']."</option>\n";
}
$smarty->assign('daftarKota', $FormData);

}

Here is frm_provinsi items

<select id="frm_provinsi" class="frm_provinsi form-control" name="frm_provinsi">
<option></option>
<option value="11">Aceh (NAD)</option>
<option value="12">Sumatera Utara</option>
<option value="13">Sumatera Barat</option>
<option value="14">Riau</option>
<option value="15">Jambi</option>
<option value="16">Sumatera Selatan</option>
<option value="17">Bengkulu</option>
<option value="18">Lampung</option>
<option value="19">Kepulauan Bangka Belitung</option>
<option value="21">Kepulauan Riau</option>
<option value="31">DKI Jakarta</option>
<option value="32">Jawa Barat</option>
<option value="33">Jawa Tengah</option>
<option value="34">DI Yogyakarta</option>
<option value="35">Jawa Timur</option>
<option value="36">Banten</option>
<option value="51">Bali</option>
<option value="52">Nusa Tenggara Barat (NTB)</option>
<option value="53">Nusa Tenggara Timur (NTT)</option>
<option value="61">Kalimantan Barat</option>
<option value="62">Kalimantan Tengah</option>
<option value="63">Kalimantan Selatan</option>
<option value="64">Kalimantan Timur</option>
<option value="65">Kalimantan Utara</option>
<option value="71">Sulawesi Utara</option>
<option value="72">Sulawesi Tengah</option>
<option value="73">Sulawesi Selatan</option>
<option value="74">Sulawesi Tenggara</option>
<option value="75">Gorontalo</option>
<option value="76">Sulawesi Barat</option>
<option value="81">Maluku</option>
<option value="82">Maluku Utara</option>
<option value="91">Papua</option>
<option value="92">Papua Barat</option>
<option value="93">Papua Selatan</option>
<option value="94">Papua Tengah</option>
<option value="95">Papua Pegunungan</option>
<option value="96">Papua Barat Daya</option>

By default frm_kota is empty like shown here

<select id="frm_kota" class="frm_kota form-control" name="frm_kota">
<option></option>

And when one of frm_provinsi item is selected, it calls Ajax and successfully load frm_city and populated to frm_kota

<select id="frm_kota" class="frm_kota form-control" name="frm_kota">
<option></option>
<option value="12.01">Tapanuli Tengah</option>
<option value="12.02">Tapanuli Utara</option>
<option value="12.03">Tapanuli Selatan</option>
<option value="12.04">Nias</option>
<option value="12.05">Langkat</option>
<option value="12.06">Karo</option>
<option value="12.07">Deli Serdang</option>
<option value="12.08">Simalungun</option>
<option value="12.09">Asahan</option>
<option value="12.10">Labuhanbatu</option>
<option value="12.11">Dairi</option>
<option value="12.12">Toba</option>
<option value="12.13">Mandailing Natal</option>
<option value="12.14">Nias Selatan</option>
<option value="12.15">Pakpak Bharat</option>
<option value="12.16">Humbang Hasundutan</option>
<option value="12.17">Samosir</option>
<option value="12.18">Serdang Bedagai</option>
<option value="12.19">Batu Bara</option>
<option value="12.20">Padang Lawas Utara</option>
<option value="12.21">Padang Lawas</option>
<option value="12.22">Labuhanbatu Selatan</option>
<option value="12.23">Labuhanbatu Utara</option>
<option value="12.24">Nias Utara</option>
<option value="12.25">Nias Barat</option>
<option value="12.71">Kota Medan</option>
<option value="12.72">Kota Pematangsiantar</option>
<option value="12.73">Kota Sibolga</option>
<option value="12.74">Kota Tanjung Balai</option>
<option value="12.75">Kota Binjai</option>
<option value="12.76">Kota Tebing Tinggi</option>
<option value="12.77">Kota Padangsidimpuan</option>
<option value="12.78">Kota Gunungsitoli</option>

The problem is what the browser rendered for the frm_kota item is a combination between frm_provinsi + frm_kota (please check screenshot, because I can not reproduce it in code)

as you can see in kota/kabupaten after Papua Barat Daya which is a provinsi name and it has to be member of frm_provinsi  while after it there is Tapanuli Tengah and so on which is the correct member off frm_city

As you can see in kota/kabupaten after Papua Barat Daya which is a provinsi name and it has to be member of frm_provinsi while after it there is Tapanuli Tengah and so on which is the correct member off frm_city

Upvotes: 1

Views: 98

Answers (0)

Related Questions