【问题标题】:run php script with ajax shows no result用ajax运行php脚本没有结果
【发布时间】:2015-03-01 15:27:30
【问题描述】:

我正在尝试在提交表单后使用ajax 运行php 脚本。 这是表格

<form id="form" class="form">
    <input id="email" type="email" required name="email" placeholder="Email" onchange="myUpdateFunction()" value="">
    <textarea id="message" type="text" value="" name="message" onchange="myUpdateFunction()" required placeholder="Comments" style="border:none;border-bottom:1px solid #424242; width:530px;"></textarea>
    <input id="submit" type="submit" class="submit" name="send_request" value="Submit" >
</form>

这是我的脚本

$('.submit').on('click', function() {
        $.ajax({
          url: "send.php",
          method:'post',
          data: {'email': $('#email').val(), 'message': $('#message').val()}
        }).done(function() {
            alert('Message Sent.');

        });
   });

这是我的 send.php 文件

<?php 

if(isset($_POST['send_request'])){
    //send email
}

?>

但它不起作用,页面重新加载,电子邮件未发送并且没有显示“警报消息”

php 没有问题,因为如果我删除 javascript 并添加 action="send.php" method="POST" 作为其工作形式的属性,所以我认为问题出在 javascript

【问题讨论】:

  • 你需要防止提交按钮的默认行为
  • 如果我添加 else{ echo "Error"; } 在 php 页面中没有任何变化,相同的行为

标签: javascript php jquery ajax forms


【解决方案1】:

http://jsfiddle.net/o5xvpkmv/2/

你不应该对这类东西使用 onchange 或 click 事件,而是使用 submit 事件(防止提交按钮的默认行为)。

<form id="form" class="form">
    <input id="email" type="email" name="email" placeholder="Email" required>
    <textarea id="message" type="text" value="" name="message" placeholder="Comments" required></textarea>
    <input id="submit" type="submit" class="submit" name="send_request" value="Submit">
</form>


$("#form").on('submit', function(e) {
    e.preventDefault();
    $.ajax({
       url: "send.php",
       method:'post',
       data: $( this ).serialize()
     }).done(function() {
         alert('Message Sent.');
     });
});

或者(两种方式都不错)

$(document).ready(function () {
    $('#submit').click(function () {
        $.ajax({
            url: "send.php",
            method: 'post',
            data: $(this).serialize()
        }).done(function () {
            alert('Message Sent.');
        });
        return false;
    });
});

另外,关于后端,你应该做这样的检查:

if (
    isset($_POST["email"]) && 
    !empty($_POST["email"]) &&
    isset($_POST["message"]) && 
    !empty($_POST["message"])) {
        //send email   
}

【讨论】:

  • 或者在 annymous 函数的末尾,而不是 e.preventDefault() 他可以只是 return false
  • onchange 中的函数在那里,因为如果表单的所有字段都已填写,我会显示另一个 div,无论如何我尝试了您的解决方案但它没有给我任何结果,它的行为就像以前一样
  • php 没有问题,因为如果我删除 javascript 并添加 action="send.php" method="POST" 作为其工作形式的属性,所以问题出在 javascript
  • 打开谷歌浏览器控制台(CMD+ALT+J)>网络,点击提交输入,检查请求是否发送。
  • 这很奇怪,因为它不是POST,而是列方法中​​有GET
猜你喜欢
  • 2017-11-17
  • 1970-01-01
  • 1970-01-01
  • 2013-04-21
  • 1970-01-01
  • 2011-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多