2016-04-19 3 views
2

Я хочу показать ошибку ajax после отправки формы. Он заканчивается теперь «die» , но каков наилучший способ справиться с этим? Просто напишите что-нибудь в этом php-файле в тегах 'script'?Как вернуть ошибку ajax?

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'); 
} 

Я пробовал несколько решений, которые я нашел, но я не могу заставить его работать.

Спасибо!

+1

'JSON' ответ был бы одним из решений, попробуйте это! – Jer

ответ

2

Все, что вам нужно сделать, это создать массив и поместить любые параметры, которые вы хотите передать обратно в этот массив, а затем использовать json_encode(), чтобы превратить его в JSON строку, которая может быть легко обработана яваскриптом

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 woudl быть что-то вроде

$.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 Object, так что вы можете обратиться data.error_code и data.message в простом объектов JavaScript

+0

Спасибо за ваш ответ! Итак, если у меня есть php-скрипт в 'connection.php', url в моем ajax является connection.php? В данный момент это все еще приводит меня к странице blanco. –

+0

Да, это правильно – RiggsFolly

+0

Хорошо! Извините, последний вопрос: как я могу предотвратить это после отправки формы, которую он направляет мне на страницу blanco? –

1

Вы можете сделать так:

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

и асинхронность вы можете проверить:

$.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); 
     } 
    } 
}); 
1

Вы проверили jQuery Ajax API? это происходит непосредственно из их примера. Он говорит, что вы можете использовать .done().fail и .always() функции

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

лучшим решением будет сделать вас заказ json и отправить его в Ajax:

вместо die попробовать:

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

и в вас ajax callback do:

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

Используйте сообщение JSon, за которым следует номер ошибки:

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

ЯШ:

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