Json jQuery 和 php 处理的值不正确


Json jQuery and php doesn't process value's correct

我有:HTML + jQuery + ajax post和一个PHP文件来处理表单值并返回错误(真或假)和带有html标记的消息。

我的JavaScript代码:

$(document).ready(function() {
  var form = $('#form'); // contact form
  var submit = $('#submit');  // submit button
  var alert = $('.alert'); // alert div for show alert message
  // form submit event
  form.on('submit', function(e) {
    e.preventDefault(); // prevent default form submit
    $.ajax({
      url: 'contact.php', // form action url
      type: 'post', // form submit method get/post
      dataType: 'json', // request type html/json/xml
      data: form.serialize(), // serialize form data
      beforeSend: function() {
        alert.fadeOut();
        submit.html('Sending....'); // change submit button text
      },
    success: function(result) {
        if(result.error){
            /* On error stuff */
            alert(result.html).fadeIn();
        }else{
            /* On success stuff */
            alert(result.html).fadeIn();
        }
    }
    });
  });
});

最后我的PHP:

if( isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) ){
$result = array("error" => false, "html" => null);
$vars = array('name', 'email','telefoonnummer', 'message');
$verified = TRUE;
foreach($vars as $v) {
   if(!isset($_POST[$v]) || empty($_POST[$v])) {
      $verified = FALSE;
   }
}      
if(!$verified) {

$result["error"] = true;
$result["html"] = "<b>Error11</b>";
    echo json_encode($result);
    exit;
}    
$name = filter_var($_POST['name'], FILTER_SANITIZE_STRING);
$email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
$tel= filter_var($_POST['telefoonnummer'], FILTER_SANITIZE_STRING);
$message = filter_var($_POST['message'], FILTER_SANITIZE_STRING);
    $to = '';
$sent = email($to, $email, $name, $tel, $message);
if ($sent) {
$result["error"] = false;
$result["html"] = "<b>Success</b>";
    echo json_encode($result);
} else {
$result["error"] = true;
$result["html"] = "<b>Error</b>";
    echo json_encode($result);
    }
  return;
}
/**
 * Email send with headers
 *
 * @return bool | void
 **/
function email($to, $name, $email, $tel, $message){
  $header = array();
  $header[] = "MIME-Version: 1.0";
  $header[] = "From: <".$name."> <".$email.">";
  /* Set message content type HTML*/
  $header[] = "Content-type:text/html; charset=iso-8859-1";
  $header[] = "Content-Transfer-Encoding: 7bit";
  if( mail($to, $tel, $message, implode("'r'n", $header)) ) return true;
}

好的..现在很明显我知道错误返回出了问题,它确实出现了,然后在我的html中再次消失,所以我不知道那里到底发生了什么。

我不想要"修复",这样我就可以复制粘贴代码,而是解释发生了什么,出了什么问题以及如何解决它(至少那时我学到了一些东西)

您以两种不同的方式使用alert...一次作为对象,一次作为函数。后者可能是导致不良影响的原因。仔细看alert后的括号;

  • alert()是一个函数
  • alert.表示它是一个对象

我们不能在警报函数中使用jquery链接方法。