есть функция передачи данных на обработчик Код (Javascript): function send() { var email = $('#email').val(); var text = $('#text').val(); var captcha = grecaptcha.getResponse(); $.ajax({ type: 'POST', url: 'controller.php', data: { email: email, text: text, captcha: captcha }, success: function (data) { var json = JSON.parse(data); console.log(json); } }) } есть обработчик PHP: $name = $_POST['email']; $text = $_POST['text']; $captcha = $_POST['captcha']; $ip = $_SERVER['REMOTE_ADDR']; $response = [1 => '1']; $url = 'https://www.google.com/recaptcha/api/siteverify'; $key = 'секретный ключ'; $qq = $url . '?secret=' . $key . '&response=' . $captcha . '&remoteip=' . $ip; $data = json_decode(file_get_contents($qq), true); echo json_encode($response); в респонс вставил тестовый массив 1 => 1, если закомментировать "$data = json_decode(file_get_contents($qq), true); (10 строка)" то я обратно получаю в консоль $response. Если раскомментировать и получить в обработчике ответ от гугла, мне мой $responce не возвращается ajax'ом (или возвращается но он пустой, ошибок в консоли нет). почему? что я делаю не так? какой другой метод проверки рекаптчи в обработчике через аякс? спасибо...
Во первых при отдаче json нужно установить заголовок content type в application/json --- Добавлено --- Во вторых проверь чё сидит у тебя в дата отдебаж --- Добавлено --- Уверен ли ты что от туда ты получаешь json массив потому что в json decode ложить надо массив
PHP: $res = file_get_contents($qq); // Отдебаж то что приходит отсюда var_dump($res); exit; $data = json_decode($res, true); Вот заюзай такую функцию PHP: function withJson($array) { header('Content-Type: application/json'); echo json_encode($array); exit; }
Короче решение проблемы было как обычно не там где я его искал... в форме у меня стоит событие на onclikc send() PHP: <input type="submit" value="submit" name="submit" onclick="send(); return false"> пока не поставил return false форма перезагружала страницу и я просто терял свои данные которые получал от ajax response facepalm
для этого существует событие event.preventDefault; А это костыль --- Добавлено --- ну на мой взгляд костыль я бы сделал вот так. Код (Javascript): function send(event) { event.preventDefault; /* next code */ }