Отправить форму (jquery) и показать результаты в colorbox

#php #jquery #html #forms #colorbox

#php #jquery #HTML #формы #colorbox

Вопрос:

У меня есть форма, которую я хочу отправить, которая отправляется в php-скрипт для обработки данных формы.

Что мне нужно сделать, так это после нажатия кнопки submit получить всплывающее окно colorbox с результатами php в нем.

Можно ли это сделать?

Это то, что я пытался:

 $("#buildForm").click(function () { // #buildForm is button ID
    var data = $('#test-buildForm'); // #test-buildForm is form ID

    $("#buildForm").colorbox({
        href:"build_action.php", 
        iframe:true, 
        innerWidth:640, 
        innerHeight:360,
        data: data
    });
    return false;
     });
  

ОБНОВЛЕНИЕ: это должно быть возвращено в iframe как
build_action.php специально включил css и js для этих результатов.

Комментарии:

1. Конечно, это можно было бы сделать. Где ты застрял? Не могли бы вы предоставить какой-нибудь код?

2. Пожалуйста, не могли бы вы пояснить, что такое colorbox, как в диалоговом окне?

3. @Coulton — популярный плагин jQuery, клон lightbox

Ответ №1:

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

 <form action="/path/to/script.php" id="formID" method="post">
  <!-- form stuff goes here -->
  <input type="submit" name="do" value="Submit" />
</form> 

<script type="text/javascript">
$(function() { 
    $("#formID").submit(function() {
        $.post($(this).attr("action"), $(this).serialize(), function(data) {
            $.colorbox({html:data});
        },
        'html');
        return false;
    });
});
</script>
  

Комментарии:

1. Могу ли я вместо этого поместить его в iframe?

2. Также.. что будет на стороне php теперь, когда оно сериализовано.

3. Вам нужно будет написать некоторый PHP-код для обработки отправки формы и распечатать результирующий HTML-код, который вы хотите отобразить в colorbox. В моем примере это будет происходить в «/path/to/script.php »

4. Спасибо… как насчет того, чтобы иметь это в iframe? Скрипт, в который он отправляется, не зависит от страницы формы.

5. Что вы имеете в виду? Использовать iframe вместо использования colorbox? Или использовать iframe внутри colorbox вместо html:data опции? Также «скрипт, в который он отправляется, не зависит от страницы формы». <== Это не имеет значения и не должно влиять на то, как функционирует ajax / colorbox

Ответ №2:

эта статья поможет вам решить проблему

http://www.php4every1.com/tutorials/jquery-ajax-tutorial/

 $(document).ready(function(){
$('#submit').click(function() {

    $('#waiting').show(500);
    $('#demoForm').hide(0);
    $('#message').hide(0);

    $.ajax({
        type : 'POST',
        url : 'post.php',
        dataType : 'json',
        data: {
            email : $('#email').val()
        },
        success : function(data){
            $('#waiting').hide(500);
            $('#message').removeClass().addClass((data.error === true) ? 'error' : 'success')
                .text(data.msg).show(500);
            if (data.error === true)
                $('#demoForm').show(500);
        },
        error : function(XMLHttpRequest, textStatus, errorThrown) {
            $('#waiting').hide(500);
            $('#message').removeClass().addClass('error')
                .text('There was an error.').show(500);
            $('#demoForm').show(500);
            }
        });

        return false;
    });
});



< ?php
sleep(3);

if (empty($_POST['email'])) {
    $return['error'] = true;
    $return['msg'] = 'You did not enter you email.';
}
else {
    $return['error'] = false;
    $return['msg'] = 'You've entered: ' . $_POST['email'] . '.';
}

echo json_encode($return);
  

Ответ №3:

Вам нужно будет увидеть точный способ использования вашего плагина colorbox jQuery. Но вот базовый (непроверенный) пример кода, который я только что написал, чтобы, надеюсь, помочь вам в этом.

Если вы хотите отправить форму с помощью jQuery, предполагая, что у вас есть следующая форма и div для хранения данных диалога:

 <form id="myForm">
<input type="text" name="num1" />
<input type="text" name="num2" />
<input type="submit" name="formSubmit" />
</form>
<div style="display: hidden" id="dialogData"></div>
  

У вас может быть PHP-код (doAddition.php ), который может выполнять сложение двух чисел

 <?php
// Do the addition
$addition = $_POST['num1']   $_POST['num2'];

$result = array("result" => $addition);

// Output as json
echo json_encode($result);
?>
  

Вы можете использовать jQuery для обнаружения отправки кода, затем отправить данные на страницу PHP и получить результат обратно в формате JSON:

 $('form#myForm').submit( function() {

    // Form has been submitted, send data from form and get result

    // Get data from form
    var formData = $('form#myForm').serialize();

    $.getJSON( 'doAddition.php', formData, function(resultJSON) {

          // Put the result inside the dialog case
          $("#dialogData").html(resultJSON.result);

          // Show the dialog
          $("#dialogData").dialog();

    });
});
  

Комментарии:

1. Это должно быть возвращено в iframe как script.php специально включил css и js для этих результатов.

2. Не могли бы вы просто предоставить обеим страницам доступ к javascript и CSS?

Ответ №4:

Вот как я в итоге заставил его работать:

 <div id="formwrapper">
  <form method="post" action="http://wherever" target="response">
    # form stuff
  </form>

  <iframe id="response" name="response" style="display: none;"></iframe>
</div>

<script>
function hideresponseiframe() {
  $('#formwrapper #response').hide();
}

$('form').submit(
  function (event) {
    $('#formwrapper #response').show();
    $.colorbox(
      {
        inline: true,
        href: "#response",
        open: true,
        onComplete: function() {
          hideresponseiframe()
        },
        onClosed: function() {
          hideresponseiframe()
        }
      }
    );
    return true;
  }
);

</script>