Php 我的联系人表单正在工作,但它没有成功';不显示成功消息
我的联系人表单正在运行,但未显示成功消息。另一个开发人员编写了PHP代码,但我做了一些jQuery,它不会显示我的消息。我很确定问题出在jQuery上。我对这行代码特别困惑Php 我的联系人表单正在工作,但它没有成功';不显示成功消息,php,jquery,ajax,forms,Php,Jquery,Ajax,Forms,我的联系人表单正在运行,但未显示成功消息。另一个开发人员编写了PHP代码,但我做了一些jQuery,它不会显示我的消息。我很确定问题出在jQuery上。我对这行代码特别困惑 $("#result").hide().html(output).slideDown(); }, 'json'); } 我想您可能会想使用.show(),因为需要使用#result来显示html,但这似乎不起作用。完整代码如下 $(function(){ $(".btn")
$("#result").hide().html(output).slideDown();
}, 'json');
}
我想您可能会想使用.show(),因为需要使用#result来显示html,但这似乎不起作用。完整代码如下
$(function(){
$(".btn").click(function() {
//get input field values
var user_name = $('input[name=name]').val(),
user_email = $('input[name=email]').val(),
user_message = $('textarea[name=message]').val(),
proceed = true;
//simple validation at client's end
//we simply change border color to red if empty field using .css()
if(user_name===""){
$('input[name=name]').css('border','2px solid red').after('<p class="error-msg">(What\'s your name?)</p>');
proceed = false;
}
if(user_email===""){
$('input[name=email]').css('border','2px solid red').after('<p class="error-msg">(Please provide a valid email)</p>');
proceed = false;
}
if(user_message==="") {
$('textarea[name=message]').css('border','2px solid red').after('<p class="error-msg">(Please let me know what your inquiry is about)</p>');
proceed = false;
}
//everything looks good! proceed...
if(proceed)
{
//data to be sent to server
post_data = {'userName':user_name, 'userEmail':user_email, 'userMessage':user_message};
//Ajax post data to server
$.post('../../contact-form.php', post_data, function(response){
//load json data from server and output message
if(response.type === 'error')
{
output = '<div class="error">'+response.text+'</div>';
}else{
output = '<div class="success">'+response.text+'</div>';
alert('Thanks for the message');
//reset values in all input fields
$('.form-container input').val('');
$('.form-container textarea').val('');
}
$("#result").hide().html(output).slideDown();
}, 'json');
}
});
//reset previously set border colors and hide all message on .keyup()
$(".form-container input, .form-container textarea").keyup(function() {
$(".form-container input, .form-container textarea").css('border-color','');
$("#result").slideUp();
});
});
$(函数(){
$(“.btn”)。单击(函数(){
//获取输入字段值
var user_name=$('input[name=name]')。val(),
user_email=$('input[name=email]')。val(),
user_message=$('textarea[name=message]')。val(),
继续=真;
//客户端的简单验证
//如果字段为空,我们只需使用.css()将边框颜色更改为红色
如果(用户名===“”){
$('input[name=name]')。css('border','2px纯红')。在('p class=“error msg”>(你叫什么名字?)之后;
继续=错误;
}
如果(用户\电子邮件===“”){
$('input[name=email]')。css('border','2px实心红色')。在('p class=“error msg”>(请提供有效的电子邮件)')之后;
继续=错误;
}
如果(用户消息===“”){
$('textarea[name=message]')。css('border','2px实心红色')。在('p class=“error msg”>(请让我知道您的查询是关于什么的)')之后;
继续=错误;
}
//一切看起来都很好!继续。。。
如果(继续)
{
//要发送到服务器的数据
post_data={'userName':user_name,'userEmail':user_email,'userMessage':user_message};
//Ajax将数据发布到服务器
$.post('../../contact form.php',post_数据,函数(响应){
//从服务器加载json数据并输出消息
如果(response.type==='error')
{
输出=''+响应。文本+'';
}否则{
输出=''+响应。文本+'';
警惕(“谢谢你的留言”);
//重置所有输入字段中的值
$('.form container input').val('');
$('.form container textarea').val('');
}
$(“#结果”).hide().html(输出).slideDown();
}“json”);
}
});
//重置以前设置的边框颜色并隐藏.keyup()上的所有消息
$(“.form container input,.form container textarea”).keyup(函数(){
$(“.form container input,.form container textarea”).css('border-color','';
$(“#结果”).slideUp();
});
});
PHP代码
<?php
if($_POST)
所以,让人困惑的代码行是:$(“#result”).hide().html().slideDown()代码>工作。不需要改变。我看到的一个问题是,您的变量output
没有被定义为var
使其成为全局变量
除此之外,php代码似乎通过die
函数终止了成功响应,因为它不会向输出返回任何内容。更改此项:
if(!$sentMail)
{
$output = json_encode(array('type'=>'error', 'text' => 'Could not send mail! Please check your PHP mail configuration.'));
die($output);
}else{
$output = json_encode(array('type'=>'message', 'text' => 'Hi '.$user_Name .' Thank you for your email. I will get back to you as soon as possible.'));
die($output);
}
致:
希望这有帮助
这是我第二次因为HTML而被烧伤。以前我的HTML是
<form id="contact_form">
<div id="result"></div>
<div class="form-group">
<label for="name" id="name">Name</label>
<input type="text" name="name" class="form-control" id="exampleInputName" placeholder="Name" required>
</div>
<div class="form-group">
<label for="Email" id="email">Email address</label>
<input type="email" name="email" class="form-control" id="exampleInputEmail1" placeholder="Email" required>
</div>
<div class="form-group">
<label for="Message" id="message">Message</label>
<textarea rows="4" name='message'class="form-control" placeholder="Message" required></textarea>
</div>
<div><span> </span>
<input type="button" class="btn btn-default" id='submit_btn' value="Submit">
</div>
</form>
名称
电子邮件地址
消息
我所做的只是将表单更改为字段集,并将输入更改为
<button class="btn btn-default" id="submit_btn">Submit</button>
提交
老实说,我不知道为什么会这样,但它确实做到了 我认为错误在于:var\u dump($\u请求);呃…没什么区别。它仍然发送,但DOM没有更改。请尝试“console.log”(“响应:”,Response);”然后检查控制台以查看响应的样子。或者更好的方法是,console.log('the Respone:',JSON.stringify(response,null,4))
。这将进入ajax回调,json位将使其更具可读性。刚试过这个,我的控制台里也没有。我想我只需要使用另一个联系人表单,让它回显一个字符串json obj“{type:'message','text':'thisamessage'}”。然后,在ajax回调中,尝试JSON.parse(result),然后是result.type。。。等
<form id="contact_form">
<div id="result"></div>
<div class="form-group">
<label for="name" id="name">Name</label>
<input type="text" name="name" class="form-control" id="exampleInputName" placeholder="Name" required>
</div>
<div class="form-group">
<label for="Email" id="email">Email address</label>
<input type="email" name="email" class="form-control" id="exampleInputEmail1" placeholder="Email" required>
</div>
<div class="form-group">
<label for="Message" id="message">Message</label>
<textarea rows="4" name='message'class="form-control" placeholder="Message" required></textarea>
</div>
<div><span> </span>
<input type="button" class="btn btn-default" id='submit_btn' value="Submit">
</div>
</form>
<button class="btn btn-default" id="submit_btn">Submit</button>