JQuery AJAX результаты сообщения - PullRequest
0 голосов
/ 01 июля 2011

У меня есть ajax-вызов php-скрипта, который обновляет мою базу данных MySQL новой записью, когда пользователь отправляет строку данных в качестве записи. Часть PHP - это if / else, которая проверит, является ли запись дубликатом. Я могу помешать дубликату обновить базу данных, но я не знаю, как отослать сообщение об ошибке «Эта запись уже существует» ... вот мой jquery: [Сценарий] $ (function () {

    $(".entry_button").click(function() 
{
    var element = $(this);
    var boxval = $("#entry").val();
    var dataString = 'entry='+ boxval;
        if(boxval=='') {
            alert("Please Enter Some Text");
        } else {

            $("#flash").show();
            $("#flash").fadeIn(400).html('<img src="images/loading.gif" align="absmiddle">&nbsp;<span class="loading">Broifying It...</span>');
            $.ajax({
                    type: "POST",
                    url: "update_data.php",
                    data: dataString,
                    cache: false,
                    success: function(html){
                        $("ol#update").prepend(html);
                        $("ol#update li").slideDown("slow");
                        document.getElementById('entry').value='';
                        $("#flash").hide();
                    }

            });
        }
        return false;
    });
});
[/script]

и вот мой php-скрипт, который обновляет БД (update_data.php):

[php]
include('db.php');
if(isset($_POST['entry']))
{
$date_created = date('Y-m-d H:i:s');
$entry = $_POST['entry'];
$query = "SELECT COUNT(*) AS count FROM table WHERE entry = '$entry'";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
if ($row['count'] == 0) {
mysql_query("insert into table (entry,date_created) values     ('$entry','$date_created')");
$sql_in= mysql_query("SELECT entry,id FROM table order by id desc");
$r=mysql_fetch_array($sql_in);
$newentry=$r['newentry'];
$id=$r['id'];
?>
<li class="entry bar<?php echo $id; ?>">
<div class="thebro"><span><?php echo $newentry; ?></span></div>
<div class="hr"></div>
<div class="utility-left"><span class="share"><a href="#" title="Share">share</a></span> | <span class="time">days ago</span></div>
<div class="utility-right"><span class="comments">COMMENTS</span> | <span  class="like">LIKE</span></div>
</li>
<?php
} else {
$error = "Sorry, that record already exists";
}   

}
[/php]

Я хочу иметь возможность выплевывать эту переменную $error из сценария php, чтобы она отправлялась обратно при вызове ajax и отображалась в элементе моего HTML. Я погуглил дерьмо из сообщений об ошибках ajax, но все они связаны с ошибками заголовка, а не с сообщениями об ошибках валидации. Я также не использую json_encode, если кто-то не хочет переделать этот фрагмент jquery выше, чтобы он отправлялся как данные json.

Любые идеи будут великолепны!

Ответы [ 3 ]

1 голос
/ 30 октября 2013

Если в PHP возникает ошибка, я хочу, чтобы ее обрабатывал метод error объекта jjery ajax, а не «подделывал», отправляя обычный HTTP-ответ 200 с некоторой ошибкой, отмечающей responseText.

Когда из PHP возвращается HTTP 500, обработчик ошибок ajax не захватывает 'responseText'.Обработчик ошибок получает объект XHR, состояние «ошибка» и сообщение об ошибке «Внутренняя ошибка сервера».

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

header( 'HTTP/1.1 500 My Custom Error Message' );

Но это не сработало.

Что сработало, так это:

function errorHandler( $number, $message, $file, $line ) {
    $data = array(
        'message' => $message,
        'line' => $line,
        'file' => $file,
        'trace' => debug_backtrace()
    );

    header( 'Debug: ' . json_encode( $data, true ) );
}

Это заставит PHP вернуть HTTP 500 с вашими пользовательскими данными в дополнительном заголовке.

Чтобы получить доступ к пользовательской информации из обработчика ошибок ajax:

$.ajax({
    success: function( response ) {
        // ...
    },
    error: function( XHR, status, errorThrown ) {
        $.each( XHR.getAllResponseHeaders().split( '\n' ), function( i, header ) {
            if ( header.substr( 0, 7 ) == 'Debug: ' ) {
                var error = JSON.parse( header.substr( 7 ) );
                console.log( error );
            }
        });
    }
});
0 голосов
/ 01 июля 2011

Вывод ошибки в PHP и выход. Затем, в начале вашего успеха: функция, сделайте что-то вроде этого:

    if(ajaxRequest.responseText.substring(0, 5) === 'Sorry') {
        alert(ajaxRequest.responseText);
        return;
    }

Я предлагаю использовать подход с подстрокой, поскольку он позволяет создавать различные сообщения об ошибках, если они все начинаются с «Извините». Полезно для отладки.

0 голосов
/ 01 июля 2011

Просто введите его в свой php-файл и используйте:

document.getElementById('ajaxCatchbox').innerHTML = ajaxRequest.responseText;

Текст ответа от вашего объекта ajaxrequest собирает все, что повторяется ... Не знаю, эквивалент в jquery tho

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...