【问题标题】:Ajax call is never successAjax 调用永远不会成功
【发布时间】:2017-08-06 11:03:20
【问题描述】:

我是 facnigg 和 ajax 问题,我正在处理联系表单,我对 ajax 调用有问题, 即使字段都输入正确,调用也永远不会成功。 我尝试了几件事,但没有任何效果 有人可以给我一个建议..?

非常感谢。

$.ajax({
  url: "assets/contact_form/process-contact.php",
  type: "POST",
  dataType: "html",
  data: userData,

  beforeSend: function () {
    $( sb ).html('Sending...');
  },
  success: function (response) {

    if (response == true) {

      setTimeout(function () {

        window.location = 'index.html';

      }, 1000);

    } else {

      $( sb ).html('Can not send, please try latter'); //IT GOES STRIGHT TO HERE

    }
  }
});

 }

});

这里是php代码:

<?php

  $userData['name'] = filter_var(trim($_POST['name']), 
    FILTER_SANITIZE_STRING);
     $userData['email'] = filter_var(trim($_POST['email']), 
   FILTER_VALIDATE_EMAIL);
      $userData['phone'] = filter_var(trim($_POST['phone']), 
  FILTER_SANITIZE_STRING);
 $userData['message'] = filter_var(trim($_POST['message']), 
 FILTER_SANITIZE_STRING);

 if( ! in_array( null, $userData ) ){

$my_email = 'roni.itzhaik@gmail.com';


$nameRegx = "/^[' a-zא-ת]+(\s[' a-zא-ת]+)*$/i";
 $phoneRegx = "/^(?:0(?!(5|7))(?:2|3|4|8|9))(?:-?\d){7}$|^(0(?=5|7)(?:-?\d)
{9})$/";

  if( strlen($userData['name']) > 2 &&  strlen($userData['name']) < 70 && 
 preg_match($nameRegx, $userData['name']) ) {

   if( preg_match($phoneRegx, $userData['phone']) ){

  if( strlen($userData['message']) > 2 ){

      $subject = 'Message from ' . $userData['name'] ;
       $message_phone= $userData['message'].'Phone number: 
    '.$userData['phone'];
      $headers = 'From: ' . $userData['email']. "\r\n";

      mail($my_email, $subject, $message_phone,  $headers);
    // send mail
    // Save data to db (DON'T FORGET TO CLEAN AGAINST SQL INJECTIONS!!!)
    echo true;

          }}}}

【问题讨论】:

  • 检查并告诉我们浏览器控制台错误。
  • 一件事,从 ajax opts 中删除 dataType: "html",。自动检测响应(xml、html、json等);
  • 响应是一个对象。这不可能是真的。响应 == 真
  • 向我们展示process-contact.php 内容..
  • 我添加了 php

标签: javascript jquery ajax validation


【解决方案1】:

这可能有效。

......
if (response) {

  setTimeout(function () {

    window.location = 'index.html';
.....

【讨论】:

    【解决方案2】:

    如果你可以返回一个对象会更好:

    echo json_encode(['success' => true]);
    

    然后检查成功回调将如下所示:

    if (response.success){
       //Your logic
    }
    

    希望这会有所帮助。

    【讨论】:

    • 如果我在扭动这个,它只是在刷新页面,没有验证
    • 不确定您的意思,但您可以使用console.log(response); 在条件之前检查返回的响应,以确保您从服务器端获得所需的响应。
    猜你喜欢
    • 1970-01-01
    • 2014-06-17
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2012-06-09
    • 1970-01-01
    相关资源
    最近更新 更多