2016-08-25 4 views
0

Извините за мой плохой английский. Я пытаюсь запустить функцию PHP через скрипт ajax. PHP-скрипт должен работать как FULL NORMAL php script. Моя идея - запустить recaptcha кнопкой «Отправить» без обновления страницы. Это работает, но после этого я не нашел возможности запустить обычный PHP-скрипт. Вот часть моего сценария.запустить полный php-скрипт в ajax/jquery

PHP:

if(isset($_REQUEST['startattack'])){ 
    $secret="********************"; 
    $response=$_POST["g-recaptcha-response"]; 
    $verify=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret={$secret}&response={$response}"); 

    $captcha_success=json_decode($verify); 

    if ($captcha_success->success==false) {  
     echo "<script type='text/javascript'>alert('failed!')</script>"; 
    } else if ($captcha_success->success==true) { 
     echo "<script type='text/javascript'>alert('success!')</script>"; 
    }  
} 

HTML:

<form method='post' id="myform"> 
    <center> 
     <div class="g-recaptcha" data-sitekey="6LfETygTAAAAAMC7bQu5A3ZhlPv2KBrh8zIo_Nwa"></div> 
    </center> 
    <button type="submit" id="startattack" name="startattack" onclick="mycall()" class="btn btn-attack">Start Attack</button> 
</form> 

Аякса:

<script> 
    $(function() { 
     $('button').bind('click', function (event) { 
      $.ajax({ 
       type: 'POST', 
       url: 'post.php', 
       data: $('button').serialize(), 
       success: function() { 
        alert('button was submitted'); 
        type: 'post'; 
        url: 'post.php'; 
       } 
      }); 

      event.preventDefault();// using this page stop being refreshing 
     }); 
    }); 
</script> 

Я хочу, чтобы проверить ReCaptcha здесь. Если это правильно, он должен отозвать correct в PHP, и я хочу добавить функцию позже. То же самое с false captcha.

ответ

1

Я думаю, вы можете немного упростить вещи. Вы не возвращаете ответ в Ajax, это ваша главная проблема.

PHP:

Просто эхо возвращаемый JSON из рекапчи (хотя я понятия не имею, где вы получите g-recaptcha-response ключ/значение, вы не отправлять его в любом месте).

if(isset($_POST['startattack'])){ 
    $secret = "********************"; 
    // I have added a key/value in the ajax called "sitekey", 
    // this might be what you are trying to retrieve? 
    $response = $_POST["g-recaptcha-response"]; 
    echo file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret={$secret}&response={$response}"); 
    exit; 
} 

AJAX:

Я думаю, так как возврат из рекапчи является JSON в любом случае, просто эхо его и забрать его с этой стороны:

$(function() { 
    $('button').bind('click', function (event) { 
     var statusBlock = $('#status'); 
     statusBlock.text('button was submitted'); 
     $.ajax({ 
      type: 'POST', 
      url: 'post.php', 
      data: { 
       // Not sure if you are trying to pass this key or not... 
       "sitekey":$('.g-recaptcha').data('sitekey'), 
       "startattack":true 
      }, 
      success: function (response) { 
       var decode = JSON.parse(response); 
       var alertMsg = (decode.success)? 'Success' : 'Failed'; 
       statusBlock.text(''); 
       alert(alertMsg); 
      } 
     }); 
     // using this page stop being refreshing 
     event.preventDefault(); 
    }); 
}); 

Форма:

Оставьте место для отправки статуса отправки, чтобы оно не мешало диалогу возврата окно.

<form method='post' id="myform"> 
    <div id="status"></div> 
    <center> 
     <div class="g-recaptcha" data-sitekey="6LfETygTAAAAAMC7bQu5A3ZhlPv2KBrh8zIo_Nwa"></div> 
    </center> 
    <button type="submit" id="startattack" name="startattack" onclick="mycall()" class="btn btn-attack">Start Attack</button> 
</form> 
Смежные вопросы