jQuery $ .ajax post не публикует данные на странице ASP - PullRequest
0 голосов
/ 22 ноября 2010

Это код:

HTML в форме:

<div id="contact_form">
<h1>Contact us</h1>
<p>Please use the form below to send us a message.</p>
<form method="post" onsubmit="return sendContact();" action="sendContact.asp">
<p><label for="name" id="lname">Full name:</label>
<input type="text" class="text" name="name" id="name" onfocus="input_focus('name');" onblur="input_blur('name');" /></p>
<p><label for="email" id="lemail">Email address:</label>
<input type="text" class="text" name="email" id="email" onfocus="input_focus('email');" onblur="input_blur('email');" /></p>
<div class="x"></div>
<p class="error" id="email-error">You must enter your email address.</p>
<p><label for="category" id="lcategory">Category:</label>
<select name="category" id="category" onfocus="input_focus('category');"     onblur="input_blur('category');">
<option value="software">Software</option>
<option value="hardwae">Hardware</option>
<option value="consulting">Consulting</option>
<option value="resources">Resources</option>
</select></p>
<p><label for="message" id="lmessage">Message:</label>
<textarea name="message" id="message" onfocus="input_focus('message');"     onblur="input_blur('message');"></textarea></p>
<div class="x"></div>
<p class="error" id="message-error">You must enter your message.</p>
<p><label for="captcha" id="lcaptcha"></label>
<input type="text" class="text" name="captcha" id="captcha"     onfocus="input_focus('captcha');" onblur="input_blur('captcha');" /></p>
<div class="x"></div>
<p class="error" id="captcha-error">Are you shure about your calculations?</p>
<script type="text/javascript">
generate_captcha('lcaptcha');
</script>
<div class="x"></div>
<input type="submit" class="submit" name="send_contact" value="Send" />
</form>
<span id="contact-back">or you can <a href="index.html" class="read-more">Go back</a</span>
</div>
<div id="message_sent" style="display:none;">
<h1>Your message has been sent</h1>
<p>We'll contact you in a shortest possible time.</p>
<p>You can now <a href="index.html" class="read-more">go back</a> to home page.</p>
</div>    
</div>

это js, который делает сообщение (часть sendContact ()функция):

<code>
     var data = $("#contact_form > form").serialize();</p>

<p>$.ajax({
  type: "POST",
  url: "sendContact.asp",
  global: false,
  contentType: "application/x-www-form-urlencoded; charset=UTF-8",
  data: data,
  dataType: "text",
  async: false,
  cache: false,
  error:function () { 
   alert('AJAX Connectivity Error');}, 
  success: function(msg){
  }
});</p>

<p>$("#contact_form").fadeOut(1000, function() {
  $("#message_sent").slideDown(500);
 });</p>

<p>return false;
}
И этот код должен перехватить строку запроса "sendContact.asp":

<code>
<pre><code><%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<code><%
Ответ.Buffer = False Отклик.\ contact.txt "), ForAppending, True, -1) SendContact.WriteLine" Consulta sobre: ​​"& Request (" category ") &", отметка времени: "& Now () &" "SendContact.WriteLine" IP: "& Request.ServerVariables("REMOTE_ADDR") & "" SendContact.WriteLine "Nombre:" & Request ("name") & "" SendContact.WriteLine "E-mail:" & Request ("email") & "" SendContact.WriteLine "Mensaje:" & Request("message") & "" SendContact.WriteBlankLines 2 SendContact.Close%> Когда информация отправляется с формой всевыглядит правильно, но любые данные публикуются в «senContact.asp», и в поля «contact.txt» записывается одно пустое пространство, кроме метки времени и удаленного ip.Я также пытался выполнить запрос "Request.Querystring (" id ")", но результаты были такими же.

Спасибо за помощь в экскурсии

Ответы [ 4 ]

1 голос
/ 15 апреля 2012

Хотя это старый вопрос, я посылаю его возможный ответ.

Перед привязкой каждого параметра POST вы можете использовать функцию escape, которая кодирует переменные и преобразует пробелы и любой другой «небезопасный» символ для использования URL.

Для быстрого примера (I 'Вы только что использовали один параметр здесь. Вы можете добавить другие параметры соответственно):

$.ajax({
  type: "POST",
  url: "sendContact.asp",
  global: false,
  contentType: "application/x-www-form-urlencoded; charset=UTF-8",
  data: "name=" + escape(document.getElementById("name").value),
  dataType: "text",
  async: false,
  cache: false,
  error:function () { 
   alert('AJAX Connectivity Error');}, 
  success: function(msg){
  }
});

Надеюсь, что он будет работать для вас.

0 голосов
/ 22 ноября 2010

Две мысли:

Проверка

У вас есть незакрытый тег </a в этой строке (возможно, вам придется немного прокрутить код вправо):

<span id="contact-back">or you can <a href="index.html" class="read-more">Go back</a</span>
<!--                                                                                ^-- here -->

Валидатор W3C может помочь с такими вещами. Неправильная разметка может действительно тратить ваше время. :-) Но это вполне может быть красная сельдь здесь. (Валидатор также говорит, что есть дополнительный </div>, но я подозреваю, что это просто артефакт копирования и вставки.)

Синхронный Ajax в обработчике отправки

Я бы не пытался выдать синхронный запрос Ajax из обработчика отправки формы, просто кажется, что у вас возникли проблемы.

Я бы попробовал завершить обработчик событий, а затем отправить форму:

function sendContact() {
    var data = $("#contact_form > form").serialize();

    setTimeout(sendViaAjax, 0);
    return false;

    function sendViaAjax() {

        $.ajax({
          type: "POST",
          url: "sendContact.asp",
          global: false,
          contentType: "application/x-www-form-urlencoded; charset=UTF-8",
          data: data,
          dataType: "text",
          async: false,
          cache: false,
          error:function () { 
              alert('AJAX Connectivity Error');
          }, 
          success: function(msg){
          }
        });

        $("#contact_form").fadeOut(1000, function() {
            $("#message_sent").slideDown(500);
        });
    }
}    

Не по теме, но я настоятельно рекомендую избегать синхронных запросов Ajax в основном потоке пользовательского интерфейса. (Синхронный Ajax в веб-работнике , хорошо.) В них нет необходимости, и они блокируют браузер чем-то жестоким (особенно IE, но все они в различной степени).

0 голосов
/ 22 ноября 2010

Использовали ли вы такое приложение, как fiddler, чтобы отслеживать трафик, идущий на эту страницу, чтобы убедиться, что данные действительно публикуются? Также переместите исчезновение из формы и отображение div в обработчик успеха, вы хотите, чтобы он выполнялся только при успешном запросе ajax.

0 голосов
/ 22 ноября 2010

Тип содержимого по умолчанию application/x-www-form-urlencoded, а данные всегда отправляются как utf-8.

Не уверен, что эта строка

contentType: "application/x-www-form-urlencoded; charset=UTF-8"

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


Оригинальный ответ, неверный T.J. Crowder

Вы используете метод POST для отправки данных, поэтому вам необходимо прочитать их с помощью request.form("..")

Так что поменяйте все свои request("..") на request.form("..")

ссылка: http://msdn.microsoft.com/en-us/library/ms525985%28VS.90%29.aspx

...