Форма контакта на ajax,

Статус
В этой теме нельзя размещать новые ответы.

SaM1001

Постоялец
Регистрация
15 Янв 2008
Сообщения
132
Реакции
20
Выходит не понятная мне ошибка. Есть кто разбираеться в этом, а то я не пойму ничего и поис через гугль не дал результатов.

Это ошибка:
Код:
{"responseStatus":"err","responseMsg":"ajax"}

Это форма контакта:
Код:
                <form id="contactform" class="data" action="contact-us.php" />
                                                        <div class="collection border fast">
                                                                <input class="field" type="text" placeholder="Full name" name="name" id="name" />
                                                        </div>
                                                        <div class="collection border fast">
                                                                <input class="field" type="text" placeholder="Mail address" name="email" id="email" />
                                                        </div>
                                      <!--                  <div class="collection border fast">
                                                                <input class="field" type="text" placeholder="Subject" name="subject" id="subject" />
                                                        </div>-->
                                                        <div class="collection border fast">
                                                                <textarea class="area" placeholder="Message" name="message" id="message"></textarea>
                                                        </div>
                                                </form>
                                        </div>
                                        <div class="wrap">
                                                <input type="submit" onclick="$('#contactform').submit(); return false;" class="button border fast" name="Submit" value="Send">
                                        </div>


Это код из файла .php
Код:
/* Enter the email address on which you want to receive the contat form data
**/
  $myEmail = 'xxx@xyz.xx';

/* Enter the subject of the email with contact form data
**/
  $emailSubject = 'New email from ';

  ob_start();

  function response($responseStatus, $responseMsg) {
    $out = json_encode(array('responseStatus' => $responseStatus, 'responseMsg' => $responseMsg));

    ob_end_clean();
    die($out);
  }

  // only AJAX calls allowed
  if (!isset($_SERVER['X-Requested-With']) && !isset($_SERVER['HTTP_X_REQUESTED_WITH'])) {
    response('err', 'ajax');
  }

  // prepare headers
  $headers  = "MIME-Version: 1.0\n";
  $headers .= "Content-type: text/plain; charset=UTF-8\n";
  $headers .= "X-Mailer: PHP " . PHP_VERSION . "\n";
  $headers .= "From: {$myEmail}\n";
  $headers .= "Return-Path: {$myEmail}";
 
  // construct the message
  $tmp = date('r');
  $message = "The form was submited from {$_SERVER["HTTP_HOST"]} on $tmp by a person who's IP is: {$_SERVER['REMOTE_ADDR']}\n";
  foreach ($_POST as $field => $value) {
    $message .= $field . ': ' . $value . "\n";
  }
  $message .= "\nHave a good one!";
 
 
  if (@mail($myEmail, $emailSubject, $message, $headers)) {
    response('ok', 'sent');
  } else {
    response('err', 'notsent');
  }
 
  response('err', 'undefined');

А вот и сам common.js который, как я понял и овечает за обработку:

Код:
$(function(){
  // hide/show header
  $('#close-open-top a').bind('click', function() {
    if($('header:visible').length) {
      $('img', this).attr('src', 'images/open.png');
    } else {
      $('img', this).attr('src', 'images/close.png');
    }
    $('header').slideToggle('slow');
   
    return false;
  });

  // tabs
  $('.tab_content').hide();
  $('ul.tabs li:first').addClass('active').show();
  $('.tab_content:first').show();

  $('ul.tabs li').click(function() {
    $('ul.tabs li').removeClass('active');
    $(this).addClass('active');
    $('.tab_content').hide();
    var activeTab = $(this).find('a').attr('href');
    $(activeTab).fadeIn();
    return false;
  });

  // hide/show default text when user focuses on newsletter subscribe field
  var defaultEmailTxt = $('#email-address').val();
  $('#email-address').focus(function() {
        if ($('#email-address').val() == defaultEmailTxt) {
            $('#email-address').val('');
        }
    });
  $('#email-address').blur(function() {
        if ($('#email-address').val() == '') {
            $('#email-address').val(defaultEmailTxt);
        }
  });

  // Lightbox
  $(".gallery a[rel^='prettyPhoto']").prettyPhoto({animationSpeed:'slow',theme:'dark_rounded',slideshow:4000, autoplay_slideshow: false});
 
  // Tipsy
  $('#social li a img').tipsy({delayIn: 1200, delayOut: 1200, gravity: 's'});

  // init newsletter subscription AJAX handling
  $('#newslettersubmit').click(function() { $('#newsletterform').submit(); return false; });
  if ($('#newsletterform').attr('action').indexOf('mailchimp') == -1) {
    $('#newsletterform').ajaxForm({dataType: 'json',
                                  timeout: 2000,
                                  success: newsletterResponse});
  } else {
    $('#newsletterform').ajaxForm({dataType: 'json',
                                  timeout: 4000,
                                  beforeSubmit: function() {  $('#newslettersubmit').data('org-html', $('#newslettersubmit').html()).html('Please wait')},
                                  success: newsletterResponseMailchimp});
  }
   
  // Twitter script config
  if ($('#tweet').length) {
    $('#tweet').tweet({ username: 'webfactoryltd',
                        retweets: true,
                        join_text: 'auto',
                        avatar_size: 0,
                        count: 3,
                        template: '{avatar} {time} {join} {text}',
                        auto_join_text_default: ' we said, ',
                        auto_join_text_ed: ' we ',
                        auto_join_text_ing: ' we were ',
                        auto_join_text_reply: ' we replied to ',
                        auto_join_text_url: ' we were checking out ',
                        loading_text: 'loading tweets...'
                    });
  }
 
 
  // init contact form validation and AJAX handling
  if ($("#contactform").length > 0) {
    $("#contactform").validate({ rules: { name: "required",
                                          email: { required: true, email: true },
                                          message: "required"},
                                messages: { name: "This field is required.",
                                            email: { required: "This field is required.",
                                                    email: "Please enter a valied email address."},
                                            message: "This field is required."},
                                submitHandler: function(form) {  $(form).ajaxSubmit({dataType: 'json', success: contactFormResponse}); }
                              });
  }
});

// handle newsletter subscribe AJAX response
function newsletterResponse(response) {
  if (response.responseStatus == 'err') {
    if (response.responseMsg == 'ajax') {
      alert('Error - this script can only be invoked via an AJAX call.');
    } else if (response.responseMsg == 'fileopen') {
      alert('Error opening $emailsFile. Please refer to documentation for help.');
    } else if (response.responseMsg == 'email') {
      alert('Please enter a valid email address.');
    } else if (response.responseMsg == 'duplicate') {
      alert('You are already subscribed to our newsletter.');
    } else if (response.responseMsg == 'filewrite') {
      alert('Error writing to $emailsFile. Please refer to documentation for help.');
    } else {
      alert('Undocumented error. Please refresh the page and try again.');
    }
  } else if (response.responseStatus == 'ok') {
    alert('Thank you for subscribing to our newsletter! We will not abuse your address.');
  } else {
    alert('Undocumented error. Please refresh the page and try again.');
  }
} // newsletterResponse

function newsletterResponseMailchimp(response) {
  if (response.responseStatus == 'err') {
    if (response.responseMsg == 'ajax') {
      alert('Error - this script can only be invoked via an AJAX call.');
    } else if (response.responseMsg == 'email') {
      alert('Please enter a valid email address.');
    } else if (response.responseMsg == 'duplicate') {
      alert('You are already subscribed to our newsletter.');
    } else if (response.responseMsg == 'listid') {
      alert('Invalid MailChimp list name.');
    } else {
      alert('Undocumented error. Please refresh the page and try again. ' + response.responseMsg);
    }
  } else if (response.responseStatus == 'ok') {
    alert('Thank you for subscribing to our newsletter! We will not abuse your address.');
  } else {
    alert('Undocumented error. Please refresh the page and try again.');
  }
 
  $('#newslettersubmit').html($('#newslettersubmit').data('org-html'));
} // newsletterResponseMailchimp

// handle contact form AJAX response
function contactFormResponse(response) {
  if (response.responseStatus == 'err') {
    if (response.responseMsg == 'ajax') {
      alert('Error - this script can only be invoked via an AJAX call.');
    } else if (response.responseMsg == 'notsent') {
      alert('We are having some mail server issues. Please refresh the page or try again later.');
    } else {
      alert('Undocumented error. Please refresh the page and try again.');
    }
  } else if (response.responseStatus == 'ok') {
    alert('Thank you for contacting us! We\'ll get back to you ASAP.');
  } else {
    alert('Undocumented error. Please refresh the page and try again.');
  }
} // contactFormResponse
 
ну все ж ясно, нет данных переменных в $_SERVER
Код:
if (!isset($_SERVER['X-Requested-With']) && !isset($_SERVER['HTTP_X_REQUESTED_WITH'])) {
    response('err', 'ajax');
  }

либо переделать проверку, либо понять откуда они должны там взяться.
 
ну все ж ясно, нет данных переменных в $_SERVER
Код:
if (!isset($_SERVER['X-Requested-With']) && !isset($_SERVER['HTTP_X_REQUESTED_WITH'])) {
    response('err', 'ajax');
  }

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


Прикольно быстро ты это вычислил, а какие переменные могли бы там стоять?
name, email, message?
 
так у вас форма просто отсылается как обычная, а не ajax-запросом.. вот и получаете логичный результат
 
так у вас форма просто отсылается как обычная, а не ajax-запросом.. вот и получаете логичный результат

Так что мне теперь сделать? Убрать эту проверку совсем? Помоги разобраться, пожалуйста
 
так у вас форма просто отсылается как обычная, а не ajax-запросом.. вот и получаете логичный результат

Там в коде болтается submitHandler, поэтому непонятно еще как отправляется форма, код стремный чуток.

Так что мне теперь сделать? Убрать эту проверку совсем? Помоги разобраться, пожалуйста
Отладка дело хорошее, firebug или консоль хрома вам в помощь.
 
Тему можно закрыть, ответа на свой вопрос не нашёл, реализовал по другому. Ребятам спасибо за помощь!
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху