jQuery $ .ajax post不会将任何数据发布到ASP页面

时间:2010-11-22 14:08:34

标签: jquery post asp-classic

这是代码:

表单的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()函数的一部分):


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

$.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); });

return false; }

这是应该捕获查询字符串“sendContact.asp”的代码:


<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
Response.Buffer = False Response.CacheControl = "No-cache" Const ForReading = 1, ForWriting = 2, ForAppending = 8 Set Fso = server.CreateObject("Scripting.FileSystemObject") Set SendContact = Fso.OpenTextFile(Server.MapPath("\contact.txt"), ForAppending, True, -1) SendContact.WriteLine "Consulta sobre: "&Request("category")&", timestamp: "&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 个答案:

答案 0 :(得分:1)

虽然这是一个老问题,但我发出了可能的答案。

在绑定每个POST参数之前,您可以使用escape函数对变量进行编码,并转换空白和任何其他“不安全”字符以用于URL使用。

快速举例(我刚刚在这里使用了一个参数。你可以相应地添加其他参数):

$.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){
  }
});

希望它对你有用。

答案 1 :(得分:0)

内容类型默认为application/x-www-form-urlencoded,数据始终以utf-8的形式发送。

不确定此行

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

应该包含两个..如果它混淆正在发送的数据

,请尝试不使用它

T.J.的原始答案被证明是错误的。克劳德

您正在使用POST方法发送数据,因此您需要使用request.form("..")

来阅读这些数据

因此,请将所有request("..")更改为request.form("..")

参考:http://msdn.microsoft.com/en-us/library/ms525985%28VS.90%29.aspx

答案 2 :(得分:0)

两个想法:

验证

此行上有一个未公开的</a标记(您可能需要将代码向右滚动一点):

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

W3C validator可以帮助解决这类问题。标记无效真的会浪费你的时间。 :-)但它可能是一个红鲱鱼。 (验证器还说有一个额外的</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);
        });
    }
}    

偏离主题,但我强烈建议在主UI线程上避免同步Ajax请求。 (web worker中的同步Ajax,很好。)不需要它们,并且它们锁定浏览器的东西很激烈(特别是IE,但所有这些都在不同程度上)。

答案 3 :(得分:0)

你是否曾使用像fiddler这样的应用程序查看进入该页面的流量以确保数据实际发布?同时将淡出窗体和显示div移动到成功处理程序中,您只希望在成功的ajax请求上运行。