如何返回ajax错误


How to return a ajax error?

我想在提交表单后显示一个ajax错误。它现在以"die"结束但处理这个问题的最佳方法是什么?只是在这个php文件中用"script"标记写一些东西吗?

if($_POST['postForm'] == 'newsletter'){
    $newsletterSubscriber = new NewsletterSubscriber();
    $newsletterSubscriber->set('CMS_newsletters_id', 2);
    $newsletterSubscriber->set('created', date('Y-m-d H:i:s'));
    $newsletterSubscriber->set('firstName', $_POST['voornaam']);
    $newsletterSubscriber->set('lastName', $_POST['achternaam']);
    $newsletterSubscriber->set('companyName', $_POST['beddrijfsnaam']);
    $newsletterSubscriber->set('emailAddress', $_POST['email']);
    $newsletterSubscriber->set('subscribed', 1);
    $saved = $newsletterSubscriber->save();
    die('subscriber added');
}

我尝试了几种我找到的解决方案,但都无法实现。

谢谢!

您所需要做的就是创建一个数组,并将您想要传递回的任何参数放回该数组,然后使用json_encode()将其转换为json字符串,该字符串可以很容易地由javascript 处理

if($_POST['postForm'] == 'newsletter'){
    $newsletterSubscriber = new NewsletterSubscriber();
    $newsletterSubscriber->set('CMS_newsletters_id', 2);
    $newsletterSubscriber->set('created', date('Y-m-d H:i:s'));
    $newsletterSubscriber->set('firstName', $_POST['voornaam']);
    $newsletterSubscriber->set('lastName', $_POST['achternaam']);
    $newsletterSubscriber->set('companyName', $_POST['beddrijfsnaam']);
    $newsletterSubscriber->set('emailAddress', $_POST['email']);
    $newsletterSubscriber->set('subscribed', 1);
    $saved = $newsletterSubscriber->save();
    $response = array('error_code'=>0, 
                      'message'=>'subscriber added'
                     );
    echo json_encode($response);
    exit;
}

javascript将类似于

$.ajax({
    type: "POST",
    url: "connection.php",
    data: {param1: 'aaa'},
    dataType: JSON
})
.done( function(data){
    if(data.error_code == 0) {
       alert(data.message);
    }
});

请注意,当您使用dataType:JSON时,浏览器会自动将返回的json字符串转换为javascript对象,这样您就可以用简单的javascript对象表示法来寻址data.error_codedata.message

您可以这样做:

if($saved) {
die('subscriber added');
} else {
echo "error";
}

在ajax中,您可以检查:

$.ajax({
    type: "POST",
    url: "savedata.php",
    data: form,
    cache: false,
    success:  function(data){
        if(data == "error") {
           alert("Data has not been saved successfully. Please try again.");
           window.location.reload(true);
        }
    }
});

您检查jQuery Ajax API了吗?这直接来自他们的例子。它说你可以使用.done() .fail.always()功能

var jqxhr = $.ajax( "example.php" )
  .done(function() {
  alert( "success" );
})
.fail(function() {
  alert( "error" );
})
.always(function() {
  alert( "complete" );
});

最好的解决方案是让您自定义json并将其发送到ajax:

代替die尝试:

$message = array('error'=>'subscriber added');
 echo json_encode($message);

在你的ajax callback做:

function(success) {
    if(success.error) {
        //do stuff
    }
//do stff
}

使用json消息,后跟错误号:

if($saved) {
echo json_encode(array('message'=>'Successfully saved','erno'=>0));
} else {
echo json_encode(array('message'=>'Error on save','erno'=>1));
}

js:

success:function(data) {
  if(data.erno == 1) {
   alert(data.message)
   //do other stuf here
   } else {
    alert(data.message)//if save was successful 
   }
}