За последние 24 часа нас посетили 19447 программистов и 1632 робота. Сейчас ищут 1845 программистов ...

PHP и JS формат JSON

Тема в разделе "JavaScript и AJAX", создана пользователем Хан, 28 июл 2016.

  1. Хан

    Хан Новичок

    С нами с:
    28 июл 2016
    Сообщения:
    4
    Симпатии:
    0
    Всем привет! Есть код на js и php (ajax изучаю), тут у меня задача по уроку JSON.

    На странице есть два выпадающих списка "Страны" и "Города". Список страны: Россия и Украина. Список города: пустой. Во время выполнения скрипта в список города должны добавляться города (Москва и Питер при выборе Россия, Киев Одесса при выборе Украина).

    Скрипт отказывается работать, открыл консоль js - там непонятная и неизвестная мне ошибка в файле jquery (файл который вы подключайте для работы самого jquery). Никак не могу исправить..

    Надеюсь на помощь вот код:

    HTML:
    1. <!DOCTYPE html>
    2. <html xmlns="http://www.w3.org/1999/xhtml">
    3.     <title>Формат JSON</title>
    4.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    5.     <script type="text/javascript" src="jquery-1.9.0.min.js"></script>
    6.  
    Код (Javascript):
    1.     <script type="text/javascript">
    2.         $(document).ready(function() {
    3.             $("<select[name='country']></select>").bind("change", function() {
    4.                 $.get("script_3.php", {country: $("<select[name='country']></select>").val()}, function (data) {
    5.                     data = JSON.parse(data);
    6.                     $("select[name='city']").empty();
    7.                     for (var id in data)
    8.                         $("<select[name='city']></select>").append($("<option value='" + id + "'>" + data[id] + "</option>"));
    9.                 });
    10.             });
    11.         });
    12.     </script>
    HTML:
    1.  
    2. </head>
    3.     <label>Страна:</label>
    4.     <select name="country">
    5.         <option value="0" selected="selected"></option>
    6.         <option value="1">Россия</option>
    7.         <option value="2">Украина</option>
    8.     </select>
    9.     <br />
    10.     <label>Город:</label>
    11.     <select name="city">
    12.         <option value="0"></option>
    13.     </select>
    14. </body>
    15. </html>
    И кончено сам php:

    PHP:
    1. <?php
    2.     if ($_GET["country"] == 1) echo json.encode(array("1" => "Москва", "2" => "Питер"));
    3.     elseif ($_GET["country"] == 2) echo json.encode(array("3" => "Киев", "4" => "Одесса"))
    4. ?>
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    чо за ошибка-то?
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    мне кажется надо не так
    а
    $('select[name="country"]')
    и вообще лучше через id

    соотв.
    создаёт элемент, а не обращается к существующему, и возможно даже не создаёт его, что может генерировать ошибку, или отсылать пустой запрос. Что в итоге даёт пустой ответ от сервера.

    Прочитай про селекторы.
     
    Deonis нравится это.
  4. Хан

    Хан Новичок

    С нами с:
    28 июл 2016
    Сообщения:
    4
    Симпатии:
    0
    Попробовал, все равно не идет..
    --- Добавлено ---
    В том то и дело что я не могу найти ошибку, а в консоли выводится ошибка в файле jquery(который скачиваешь с сайта jquery) в котором нету ошибок, браузер вообще запутался..
     
  5. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @Хан показывай последний вариант и сделай пример на jsfiddler
     
  6. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    json_encode
     
  7. Хан

    Хан Новичок

    С нами с:
    28 июл 2016
    Сообщения:
    4
    Симпатии:
    0
    Про точку знаю, это просто не обновленный файл, там кроме точки я ничего не поменял. Но ошибка все равно ошибкой..
    --- Добавлено ---
    https://jsfiddle.net/dmh0z16x/
     
  8. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Вас про ошибку уже спрашивали коллеги выше, но вы упорно не даёте о ней информацию. То, что ругается библиотека, не значит, что в консоли не выводится описание ошибки.
    Можно предположить, что JSON-строка не валидна.
    1. Файл php должен быть в кодировке UTF-8 без BOM, иначе маркер добавится к отправляемому ответу.
    2. Если после кода, который возвращает ответ, есть еще какой-то исполняемый код, то хорошо бы остановить дальнейшее выполнение:
    PHP:
    1. <?php
    2. $country = filter_input(INPUT_GET, 'country', FILTER_VALIDATE_INT, ['options' => ['default' => 0]] );
    3. switch ($country) {
    4.     case 1:
    5.         $responce = ["1" => "Москва", "2" => "Питер"];
    6.         break;
    7.     case 2:
    8.         $responce = ["3" => "Киев", "4" => "Одесса"];
    9.         break;
    10.     default:
    11.         $response = ['error' => 'WTF?'];
    12.    
    13. }
    14. exit ( json_encode($response) );
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    если ошибка
    Uncaught ReferenceError: $ is not defined
    то это значит, что ты просто jquery не прицепил до того, как обратился к ней.
     
  10. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    не работает, там в html не нужно body использовать, в javascript выбрать версию jquery, onDomready указать, убрать ready из своего кода
     
  11. Хан

    Хан Новичок

    С нами с:
    28 июл 2016
    Сообщения:
    4
    Симпатии:
    0
    --- Добавлено ---
    Сразу было понятно что не заработает, в jsfiddle некуда php вписывать, а без php этот код не должен работать, тут и вывод в fiddle все в порядке..
    --- Добавлено ---
    Не такая, jquery я подключил.
    --- Добавлено ---
    Никакого кода дальше быть не должно. В php по идее все правильно, тоже самое в js, я тысячу раз проверял (есть рабочий код в видео), но работать отказывается..
     
  12. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    сделай заглушку, не подгружай ajax, а просто из переменной добавляй json
     
  13. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Сделал вам рабочий пример. Разбирайтесь, а то можно еще долго водить хороводы.