CodeIgniter Controller - как передать статус обратно вызывающей функции - PullRequest
1 голос
/ 24 мая 2011

Я отправляю некоторые данные в действие на контроллере с использованием инфраструктуры CI.Пост успешно завершен, но я хотел бы вернуть статус вызывающему jQuery.post ().

Используя firebug, я вижу, что пост успешно завершен (200), но я не вижу json, которыйЯ возвращаюсьПочему я не вернул JSON?

public function sendMail()
{
    $senderName = trim($_POST['senderName']);
    $returnEmail = trim($_POST['returnEmail']);
    $message = trim($_POST['message']);


    if (valid_email($returnEmail))
    {
        send_email('me@my.com','Website Email From: '.$senderName, $message);
        $success = array('success'=>'Mail Sent');
        echo json_encode($success);
    }
    else
    {
        $errorMessage = array('error'=>'Invalid Email Address');
            echo json_encode($errorMessage);
    }
}

Ajax post

$.post("http://example.com/index.php/mail/sendmail",{senderName: senderName, returnEmail: senderAddr, message: message }, function(data){
if(data.status == "success")
{
    alert("mail sent.");
}
else
{
    alert("mail failure");
}
}); 

Ответы [ 2 ]

0 голосов
/ 08 июня 2011

Проблема была с URL. Я думаю, что попытка публикации на 'http://mysite.com' с моего локального хоста вызывала проблемы безопасности межсайтовых сценариев.

Я изменил свойство url на что-то относительное, и оно прекрасно работает.

$.ajax({
    type: 'POST',
    url: "index.php/mail/sendmail",
    data: {senderName: senderName, returnEmail: senderAddr, message: message},
    dataType: "JSON",
    success: function(data){
        if(typeof data.error == "undefined"){
            alert("Mail failure");
        }
        else{
            alert("Mail sent");
        }
    },
    error: function(data){
        alert("Something went wrong"); // possible that JSON wasn't returned
    }
});
0 голосов
/ 24 мая 2011

Вы можете проверить, используя $_GET вместо $_POST, пока не получите желаемый результат. Ваш код должен работать, если:

  • Вы не загрузили почтовый помощник
  • Вы используете старую версию PHP, которая не поддерживает json_*()
  • Чувствительный к регистру метод (sendMail, а не sendmail)

Я бы также рекомендовал использовать следующий код для вашего JavaScript:

$.ajax({
    type: 'POST',
    url: "http://mysite.com/index.php/mail/sendmail",
    data: {senderName: senderName, returnEmail: senderAddr, message: message},
    dataType: "JSON",
    success: function(data){
        if(typeof data.error == "undefined"){
            alert("Mail failure");
        }
        else{
            alert("Mail sent");
        }
    },
    error: function(data){
        alert("Something went wrong"); // possible that JSON wasn't returned
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...