За последние 24 часа нас посетили 10023 программиста и 446 роботов. Сейчас ищет 81 программист ...

rechaptcha ajax

Тема в разделе "JavaScript и AJAX", создана пользователем Taktreba, 7 дек 2017.

  1. Taktreba

    Taktreba Новичок

    С нами с:
    11 янв 2017
    Сообщения:
    164
    Симпатии:
    29
    есть функция передачи данных на обработчик
    Код (Javascript):
    1. function send() {
    2.     var email = $('#email').val();
    3.     var text = $('#text').val();
    4.     var captcha = grecaptcha.getResponse();
    5.  
    6.  
    7.     $.ajax({
    8.         type: 'POST',
    9.         url: 'controller.php',
    10.         data: {
    11.             email: email,
    12.             text: text,
    13.             captcha: captcha
    14.         },
    15.         success: function (data) {
    16.             var json = JSON.parse(data);
    17.  
    18.             console.log(json);
    19.  
    20.         }
    21.     })
    22. }
    есть обработчик
    PHP:
    1. $name = $_POST['email'];
    2. $text = $_POST['text'];
    3. $captcha = $_POST['captcha'];
    4. $ip = $_SERVER['REMOTE_ADDR'];
    5. $response = [1 => '1'];
    6.  
    7. $url = 'https://www.google.com/recaptcha/api/siteverify';
    8. $key = 'секретный ключ';
    9. $qq = $url . '?secret=' . $key . '&response=' . $captcha . '&remoteip=' . $ip;
    10. $data = json_decode(file_get_contents($qq), true);
    11.  
    12. echo json_encode($response);
    в респонс вставил тестовый массив 1 => 1, если закомментировать "$data = json_decode(file_get_contents($qq), true); (10 строка)" то я обратно получаю в консоль $response. Если раскомментировать и получить в обработчике ответ от гугла, мне мой $responce не возвращается ajax'ом (или возвращается но он пустой, ошибок в консоли нет).
    почему?
    что я делаю не так?
    какой другой метод проверки рекаптчи в обработчике через аякс?
    спасибо...
     
    #1 Taktreba, 7 дек 2017
    Последнее редактирование: 7 дек 2017
  2. Taktreba

    Taktreba Новичок

    С нами с:
    11 янв 2017
    Сообщения:
    164
    Симпатии:
    29
    заменил file_get_contents на curl_setopt, результат такой же
     
  3. askanim

    askanim Зэк
    [ БАН ]

    С нами с:
    7 апр 2016
    Сообщения:
    1.954
    Симпатии:
    139
    Адрес:
    GABRIEL
    Во первых при отдаче json нужно установить заголовок content type в application/json
    --- Добавлено ---
    Во вторых проверь чё сидит у тебя в дата отдебаж
    --- Добавлено ---
    Уверен ли ты что от туда ты получаешь json массив потому что в json decode ложить надо массив
     
  4. askanim

    askanim Зэк
    [ БАН ]

    С нами с:
    7 апр 2016
    Сообщения:
    1.954
    Симпатии:
    139
    Адрес:
    GABRIEL
    PHP:
    1. $res = file_get_contents($qq); // Отдебаж то что приходит отсюда
    2. var_dump($res);
    3. $data = json_decode($res, true);
    Вот заюзай такую функцию
    PHP:
    1. function withJson($array) {
    2.         header('Content-Type: application/json');
    3.         echo json_encode($array);
    4.         exit;
    5.     }
     
  5. Taktreba

    Taktreba Новичок

    С нами с:
    11 янв 2017
    Сообщения:
    164
    Симпатии:
    29
    Короче решение проблемы было как обычно не там где я его искал...
    в форме у меня стоит событие на onclikc send()
    PHP:
    1. <input type="submit" value="submit" name="submit" onclick="send(); return false">
    пока не поставил return false форма перезагружала страницу и я просто терял свои данные которые получал от ajax response facepalm
     
  6. askanim

    askanim Зэк
    [ БАН ]

    С нами с:
    7 апр 2016
    Сообщения:
    1.954
    Симпатии:
    139
    Адрес:
    GABRIEL
    для этого существует событие event.preventDefault;
    А это костыль
    --- Добавлено ---
    ну на мой взгляд костыль я бы сделал вот так.
    Код (Javascript):
    1. function send(event) {
    2.    event.preventDefault;
    3. /* next code */
    4. }
     
    Taktreba нравится это.
  7. romach

    romach Активный пользователь

    С нами с:
    26 окт 2013
    Сообщения:
    1.916
    Симпатии:
    341
  8. askanim

    askanim Зэк
    [ БАН ]

    С нами с:
    7 апр 2016
    Сообщения:
    1.954
    Симпатии:
    139
    Адрес:
    GABRIEL