我想在提交表单后显示一个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_code
和data.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
}
}