Ошибки php были вызваны во время запроса ajax

Is there a way to get PHP to return an AJAX error code if the PHP script fails somewhere? I was following a tutorial and typed this in to my PHP: $return['error'] = true; $return['msg'] = "Could not

For simple transfer of data from PHP to AJAX, Json encoding or key value pairs are not always necessary. It can be simply done using string handling.

A sample code explaining this functionality is below.

    $query = "SELECT email FROM login WHERE email = '". mysqli_real_escape_string($conn,$email) ."' AND password = '". mysqli_real_escape_string($conn,$pass) ."'" ;

    $result = mysqli_query($conn,$query);
    $row=mysqli_fetch_row($result);

    $row_cnt = mysqli_num_rows($result);
    $s_email = $row[0];

    if ($row_cnt == 1) {
        $response="success";
    } else {
    $response = "Invalid Credentials";
    }

    $conn->close();

    $_SESSION["email"]= $s_email;
    echo $response;

This code shows how a ‘success’ response is sent back to ajax calling the php code. Further in ajax the following could be done to retrieve the response.

    $.ajax({ type : 'POST',
          data : {email: $('#email').val(), password: $('#pass').val()},
          url  : 'login.php',              
          success: function (data) {
            if(data == 'success'){  //the value echoed from php can be stored in the data variable of ajax
                window.location.assign('upload.php');
            }
            else{
                alert(data);
            }
          },
          error: function ( xhr ) {
            alert("error");
        }
    });

The above concept can be extended to return MULTIPLE VALUES also. This method allows simple tranfer of data from PHP to AJAX in a string format.

We have to follow a simple step of echoing everything we need to send as a response from the php to ajax, seperated by a unique seperator.

    echo $response.#;
    echo $email.#;
    echo $password.#;
    echo "Hello".#;
    echo "World";

Then the variable data in ajax could be simply retrieved as in the above example and a simple function like,

    var res = data.split("#");

data, being the variable within ajax.
The res array can then be used within js for whatever purpose we need.

Содержание

  1. AJAX: Шпаргалка по AJAX на jQuery
  2. Стандартная отправка данных через Ajax.
  3. Отправка POST запроса через Ajax
  4. Отправка JSON данных через Ajax
  5. Запланировать выполнение JS скрипта
  6. Сокращённые виды функций для Ajax запросов
  7. Обработка ошибок связанных с AJAX запросом
  8. 7 Основные параметры для работы с AJAX функциями
  9. Handling Ajax errors with jQuery.
  10. JQuery 3.0: The error, success and complete callbacks are deprecated.
  11. One thought on “ Handling Ajax errors with jQuery. ”
  12. Ajax php error function
  13. Вывод ошибок ajax, исключения
  14. jQuery ajax error function – jQuery Ajax Error Handling Function
  15. jQuery ajax error function – jQuery Ajax Error Handling Function
  16. jQuery ajax error function using jqXHR
  17. Parameters for jQuery ajax error function with jqXHR
  18. jQuery ajax error function with an validation error
  19. Related Posts
  20. Как на php вернуть конкретную ошибку при оправке формы Ajax?

AJAX: Шпаргалка по AJAX на jQuery

Всем привет в новой записи мы с вами разберём основные функции для Ajax запросов, которые позволяют передавать информацию с сайта в PHP скрипт без перезагрузки страницы.

Для работы Ajax запросов вам нужно подключить jQuery к вашему проекту. Ссылку на jQuery вы можете найти здесь.

Данный взяты с моего сайта Prog-Time.

Стандартная отправка данных через Ajax.

Отправка POST запроса через Ajax

Для отправки POST запроса используем подобный код, меняем только параметр method

Отправка JSON данных через Ajax

Для отправки JSON данный через AJAX можно использовать только методом GET.

Запланировать выполнение JS скрипта

После выполнения данного запроса, скрипт указанный в параметре url сразу будет выполнен.

Сокращённые виды функций для Ajax запросов

Сокращённая версия запроса на выполнение JS скрипта

Обработка ошибок связанных с AJAX запросом

7 Основные параметры для работы с AJAX функциями

Все параметры для отправки AJAX запросов

async (по умолчанию: true).Тип: Boolean.По умолчанию, все запросы отправляются асинхронно и не задерживают работу других JS скриптов (это значение true), для того чтобы ждать пока выполниться Ajax запрос – поставьте значение false.Обратите внимание, что кроссдоменные запросы и элемент, параметр dataType которого имеет значение “jsonp” не поддерживают запросы в синхронном режиме. Учтите, что используя синхронные запросы вы можете временно заблокировать браузер отключив какие-либо действия пока запрос будет активен.

beforeSendФункция обратного вызова, которая будет вызвана перед осуществлением AJAX запроса. Функция позволяет изменить объект jqXHR (в jQuery 1.4.х объект XMLHTTPRequest) до его отправки. Объект jqXHR это надстройка расширяющая объект XMLHttpRequest, объект содержит множество свойств и методов, которые позволяет получить более полную информацию об ответе сервера, а так же объект содержит Promise методы. Если функция beforeSend возвращает false, то AJAX запрос будет отменен. Начиная с версии jQuery 1.5 функция beforeSend будет вызываться независимо от типа запроса.

cache (по умолчанию: true, для dataType “script” и “jsonp” false).Тип: Boolean.Если задано значение false, то это заставит запрашиваемые страницы не кэшироваться браузером. Обратите внимание, что значение false будет правильно работать только с HEAD и GET запросами.

complete.Тип: Function( jqXHR jqXHR, String textStatus ).Функция, которая вызывается, когда запрос заканчивается (функция выполняется после AJAX событий “success” или “error”). В функцию передаются два параметра: jqXHR (в jQuery 1.4.х объект XMLHTTPRequest) и строка соответствующая статусу запроса (“success”, “notmodified”, “nocontent”, “error”, “timeout”, “abort”, или “parsererror”). Начиная с версии jQuery 1.5 параметр complete может принимать массив из функций, которые будут вызываться по очереди.

contents.Тип: PlainObject.Объект состоящий из пар строка/регулярное выражение, определяющих, как jQuery будет обрабатывать (парсить) ответ в зависимости от типа содержимого. Добавлен в версии jQuery 1.5.

contentType (по умолчанию: “application/x-www-form-urlencoded; charset=UTF-8”).Тип: Boolean, или String.Определяет тип содержимого, которое указывается в запросе при передаче данных на сервер. С версии с jQuery 1.6 допускается указать значение false, в этом случае jQuery не передает в заголовке поле Content-Type совсем.

context.Тип: PlainObject.При выполнении AJAX функций обратного вызова контекстом их выполнения является объект window. Параметр context позволяет настроить контекст исполнения функции таким образом, что $( this ) будет ссылаться на определенный DOM элемент, или объект.

crossDomain (по умолчанию: false для запросов внутри того же домена, true для кроссдоменных запросов).Тип: Boolean.Если вы хотите сделать кроссдоменный запрос находясь на том же домене (например jsonp-запрос), то установите этот параметр в true. Это позволит, к примеру, сделать перенаправление запроса на другой домен с вашего сервера. Добавлен в версии jQuery 1.5.

data.Тип: PlainObject, или String, или Array.Данные, которые будут отправлены на сервер. Если они не является строкой, то преобразуются в строку запроса. Для GET запросов строка будет добавлена к URL. Для того, чтобы предотвратить автоматическую обработку вы можете воспользоваться параметром processData со значением false. Если данные передаются в составе объекта, то он должен состоять из пар ключ/значение. Если значение является массивом, то jQuery сериализует несколько значений с одним и тем же ключом (в зависимости от значения параметра traditional, который позволяет задействовать традиционный тип сериализации основанный на методе $.param).

dataFilter.Тип: Function( String data, String type ) => Anything.Функция вызывается после успешного выполнения AJAX запроса и позволяет обработать “сырые” данные, полученные из ответа сервера. Возврат данных должен происходить сразу после их обработки. Функция принимает два аргумента: data – данные полученные от сервера в виде строки и type – тип этих данных (значение параметра dataType).

dataType (по умолчанию: xml, json, script, или html ).Тип: String.Определяет тип данных, который вы ожидаете получить от сервера. Если тип данных не указан, то jQuery будет пытаться определить его на основе типа MIME из ответа (XML тип MIME приведет к получению XML, с версии jQuery 1.4 json будет давать объект JavaScript, script будет выполнять скрипт, а все остальное будет возвращено в виде строки).Основные типы (результат передается в качестве первого аргумента в функцию обратного вызова success):

“xml” – возвращает XML документ, который может быть обработан с помощью jQuery.

“html” – возвращает HTML как обычный текст, теги

Источник

Handling Ajax errors with jQuery.

This is a tutorial on how to handle errors when making Ajax requests via the jQuery library. A lot of developers seem to assume that their Ajax requests will always succeed. However, in certain cases, the request may fail and you will need to inform the user.

Here is some sample JavaScript code where I use the jQuery library to send an Ajax request to a PHP script that does not exist:

If you look at the code above, you will notice that I have two functions:

  • success: The success function is called if the Ajax request is completed successfully. i.e. If the server returns a HTTP status of 200 OK. If our request fails because the server responded with an error, then the success function will not be executed.
  • error: The error function is executed if the server responds with a HTTP error. In the example above, I am sending an Ajax request to a script that I know does not exist. If I run the code above, the error function will be executed and a JavaScript alert message will pop up and display information about the error.

The Ajax error function has three parameters:

In truth, the jqXHR object will give you all of the information that you need to know about the error that just occurred. This object will contain two important properties:

  • status: This is the HTTP status code that the server returned. If you run the code above, you will see that this is 404. If an Internal Server Error occurs, then the status property will be 500.
  • statusText: If the Ajax request fails, then this property will contain a textual representation of the error that just occurred. If the server encounters an error, then this will contain the text “Internal Server Error”.

Obviously, in most cases, you will not want to use an ugly JavaScript alert message. Instead, you would create an error message and display it above the Ajax form that the user is trying to submit.

JQuery 3.0: The error, success and complete callbacks are deprecated.

Update: As of JQuery 3.0, the success, error and complete callbacks have all been removed. As a result, you will have to use the done, fail and always callbacks instead.

An example of done and fail being used:

Note that always is like complete, in the sense that it will always be called, regardless of whether the request was successful or not.

Hopefully, you found this tutorial to be useful.

One thought on “ Handling Ajax errors with jQuery. ”

thanks its helpful 🙂 many of us not aware of error block in ajax

Источник

Ajax php error function

Вывод ошибок ajax, исключения

Думаю многие с таким столкнулись, при ошибках в ajax многие модули на php не выводят ошибки, а просто дохнут на запросе ajax ($.ajax(<). Опишу как сделать Вывод ошибок ajax, исключения в таких ситуациях. Ищем запрос ajax в коде вот мой например в filterPro:

Видим при успехе он выполняет операции (…). Но изза ошибки он и не падает на успех, все что нужно это добавить исключения error:

$.ajax(dataType:»json»,
success:function (g) <
. >,
error: function(jqXHR, exception)
<
if (jqXHR.status === 0) <
alert(‘Not connect.n Verify Network.’); // не включен инет
> else if (jqXHR.status == 404) <
alert(‘Requested page not found. [404]’); // нет такой страницы
> else if (jqXHR.status == 500) <
alert(‘Internal Server Error [500].’); // нет сервера такого
> else if (exception === ‘parsererror’) <
// ошибка в коде при парсинге
alert(jqXHR.responseText);
> else if (exception === ‘timeout’) <
alert(‘Time out error.’); // недождался ответа
> else if (exception === ‘abort’) <
alert(‘Ajax request aborted.’); // прервался на стороне сервера
> else <
alert(‘Uncaught Error.n’ + jqXHR.responseText); // не знает что это
>
> // error
>); // общий

Русская версия error:

error: function(jqXHR, exception)
<
if (jqXHR.status === 0) <
alert(‘НЕ подключен к интернету!’);
> else if (jqXHR.status == 404) <
alert(‘НЕ найдена страница запроса [404])’);
> else if (jqXHR.status == 500) <
alert(‘НЕ найден домен в запросе [500].’);
> else if (exception === ‘parsererror’) <
alert(«Ошибка в коде: n»+jqXHR.responseText);
> else if (exception === ‘timeout’) <
alert(‘Не ответил на запрос.’);
> else if (exception === ‘abort’) <
alert(‘Прерван запрос Ajax.’);
> else <
alert(‘Неизвестная ошибка:n’ + jqXHR.responseText);
>
>

Не забывайте главное запятую поставить после success. И помните, этот способ хорош на время отладки, а так можете сделать более уязвимым сайт (он так же выводит и переменные и их значения). Тестировал у себя, пока нету проблемм, если есть улучшения кода пишите в комменте, будем улучшать вместе.

Источник

jQuery ajax error function – jQuery Ajax Error Handling Function

jQuery ajax error function – jQuery Ajax Error Handling Function

In this post we will show you how to jQuery ajax error function when Ajax decision passing information to a page that then returns a worth(value).

I have retrieved the self-made decision from the page however I even have coded it so it raises an erreo(bug) within the your call page(example url: «data.php» ). however do we retrieve that error from the jquery? how we get jQuery Ajax Error Handling Function hear is the solution of ajax error function.

this jQuery ajax error function is very basic and easy to use with your ajax call.

jQuery ajax error function using jqXHR

jQuery ajax error function using jqXHR in this function we can get different type ajax error like 404 page error, 500 Internal Server error, Requested JSON parse, Time out error.

Parameters for jQuery ajax error function with jqXHR

Parameters for jQuery ajax error function with jqXHR for It actually an error object which is looks like this.

jQuery ajax error function with an validation error

jQuery ajax error function with an validation error :: If we want to inform(get error message) in frontend about an validation error try this method.

Jquery ajax request example In this post we will give you information about Jquery ajax…

define a function in jQuery In this post we will give you information about define…

Laravel 5 AJAX Pagination using JQuery Example In this post, we will show you the…

Источник

Как на php вернуть конкретную ошибку при оправке формы Ajax?

Форма с помощью Ajax отправляет данные в send.php обработчик и он уже взаимодействует с БазойДанных.

Можно ли прямо в обработчике send.php указывать ошибки типа «Неверный логин» или «Неверный пароль» или сразу обе ошибки и отправлять их на текущую страницу с формой?
Чтобы с помощью JavaScript далее оформлять эти ошибки для пользователя.

Если да, то покажете пример?

Нашел только технологию — передача ошибки в заголовок, но таким образом можно передать только 1 ошибку, да и строго определенные ошибки, да и не безопасно это от инъекций.

Не могу понять, как вообще делают такое.
Неужели можно только ограничиваться обработчиком на текущей странице, где форма отправки данных там и обработчик.

Send.php (RedBean.php регистрация пользователя)

  • Вопрос задан более трёх лет назад
  • 1099 просмотров

Простой 8 комментариев

Вроде нашел, передача json в заголовок?

А как прочитать этот json с помощью js на странице с формой ?

И безопасна ли такая передача данных?

Это не совсем простая отправка формы Ajax + PHP

Код может выглядеть вот так:

И кстати как инструмент для просмотра запросов к серверу и ответов от сервера, можно использовать вкладку Network в DevTools браузер Google Chrome, ну и в других браузерах тоже есть такая вкладка

Сергей Хлопов, на экран не получается, только в консоль
пробывал document.write(response.messages_error);
document.writeln(response.messages_error);
alert(response.messages_error);

Сергей Хлопов, я создал в html пустой див и сделал так:

Высвечивается undefined почему-то

AJIEKC_10, Значит в response.messages_error нет сообщения. Попробуйте посмотреть что в этой переменной через console.log. Т.е:

  1. Написать в функции которая выполняется после успешной отправки ajax запроса: console.log(response);
  2. Выполнить действие в браузере что бы ajax запрос отправился;
  3. И затем смотрим что у нас вывелось на вкладке Console

Функция ajaxSend это я так понял какая-то пользовательская ? И внутри неё происходит ajax запрос верно ?

Сергей Хлопов, мы в обработчике делали encode_json;
когда я попробовал вывести response полностью своим последним методом у меня вышло отобразить этот json массив. Однако взять с него текст ошибки не получается. Через индексирование выходит брать лишь по букве)
а если так:

то отображается [object Object]

когда я попробовал вывести response полностью своим последним методом у меня вышло отобразить этот json массив. Однако взять с него текст ошибки не получается.

Предполагаю из-за того что в response ответ в формате строки. Т.е. не преобразовался в объект JavaScript, а по хорошему должен преобразоваться и далее нужно работали с объектом так все делают.
Что бы получился объект есть два способа:

  1. В настройках ajax запроса указать тип данных который ожидаете получить от сервера, к примеру в jQuery это dataType: ‘json’; (в ответ выше есть пример) см. документацию jQuery.ajax
  2. Либо уже после ajax запроса использовать метод JSON.parse(), что бы получить объект (как в коде который вы скинули выше)

Лучше конечно первый вариант, но я не знаю с помощью какой библиотеки вы отправляете ajax запрос.
Если второй вариант то можно сделать так:

Если используйте php код из моего ответа, то там могут быть возможно уязвимости какие нибудь, просто обращаю на это внимание, сам пока не силён в этом поэтому точно сказать не могу что и как

В общем я вчера смог-таки вывести это сообщение вот таким образом

Хоть и был исчерпан лимит бесполезных комментариев надеюсь они не будут таковыми и это кому-то пригодится)
Сергей Хлопов, спасибо за отклик и участие!

Источник

У нас есть несколько настраиваемых конечных точек, которые делают разные вещи, к которым мы получаем доступ через /wp/wp-admin/admin-ajax.php?action=some_action.

Однако всякий раз, когда в процессе разработки возникает ошибка, такая как синтаксическая, логическая, фатальная и т. д., Мы просто получаем «500 Internal Server Error» при просмотре страницы в браузере.

На каждой другой странице сайта, когда возникает ошибка, она выдает нам ошибку PHP, чтобы помочь нам отладить.

Однако, когда ошибка исходит из области admin-ajax.php, мы должны затем открыть наш файл журнала PHP, чтобы вместо этого увидеть ошибку, что является большей проблемой при активной разработке.

Есть ли что-то в wordpress, что отключает отображение ошибок в этом пространстве имен URL? и если да, то как мы можем предотвратить это, чтобы разрешить отображение ошибок в браузере?


Ответы
3

Https://codex.wordpress.org/Debugging_in_WordPress

 // Enable WP_DEBUG mode
define( 'WP_DEBUG', true );

// Enable Debug logging to the /wp-content/debug.log file
define( 'WP_DEBUG_LOG', true );

// Disable display of errors and warnings 
define( 'WP_DEBUG_DISPLAY', false );

Определите как таковые следующие константы. Вы сможете увидеть debug.log под wp-content. Я обычно тоже отключаю отображение отладки, потому что это вызывает проблему с уже отправленными заголовками.

Обновлено:

Таким образом, очевидно, что отчеты об ошибках отключены для запросов ajax в последней строке метода wp_debug_mode() в wp-includes/load.php.

if ( defined( 'XMLRPC_REQUEST' ) || defined( 'REST_REQUEST' ) || ( defined( 'WP_INSTALLING' ) && WP_INSTALLING ) || wp_doing_ajax() ) {
        @ini_set( 'display_errors', 0 );
    }

I Если вы хотите увидеть ошибки PHP при использовании ajax, откройте файл wp-includes / load.php и в строке 336 измените эту строку:

if ( defined( 'XMLRPC_REQUEST' ) || defined( 'REST_REQUEST' ) || ( defined( 'WP_INSTALLING' ) && WP_INSTALLING ) || wp_doing_ajax() ) {
        @ini_set( 'display_errors', 0 );
    }

К

if ( defined( 'XMLRPC_REQUEST' ) || defined( 'REST_REQUEST' ) || ( defined( 'WP_INSTALLING' ) && WP_INSTALLING ) || wp_doing_ajax() ) {
        @ini_set( 'display_errors', 1 );
    }

Теперь вы сможете видеть ошибки ajax в консоли вашего браузера. Не забудьте отменить это, когда закончите отладку!

Отредактируйте wp-includes/class-wp-fatal-error-handler.php и измените это в display_default_error_template( $error, $handled ):

$message = sprintf(
                        '<p>%s</p><p><a href = "%s">%s</a></p>',
                        $message,
                        /* translators: Documentation explaining debugging in WordPress. */
                        __( 'https://wordpress.org/support/article/debugging-in-wordpress/' ),
                        __( 'Learn more about debugging in WordPress.' )
                );

К

$message = sprintf(
                        '<p>%s</p><p><a href = "%s">%s</a></p>',
                        $message . ' ' . json_encode($error),
                        /* translators: Documentation explaining debugging in WordPress. */
                        __( 'https://wordpress.org/support/article/debugging-in-wordpress/' ),
                        __( 'Learn more about debugging in WordPress.' )
                );

Затем просмотрите HTML-ответ на admin-ajax.php с помощью инструментов разработчика.

Другие вопросы по теме

Для простой передачи данных с PHP на AJAX не всегда нужны коды кодирования Json или пары ключей. Его можно просто выполнить с помощью обработки строк.

Ниже приведен пример кода, объясняющего эту функциональность.

    $query = "SELECT email FROM login WHERE email = '". mysqli_real_escape_string($conn,$email) ."' AND password = '". mysqli_real_escape_string($conn,$pass) ."'" ;

    $result = mysqli_query($conn,$query);
    $row=mysqli_fetch_row($result);

    $row_cnt = mysqli_num_rows($result);
    $s_email = $row[0];

    if ($row_cnt == 1) {
        $response="success";
    } else {
    $response = "Invalid Credentials";
    }

    $conn->close();

    $_SESSION["email"]= $s_email;
    echo $response;

Этот код показывает, как ответ «успех» отправляется обратно в ajax, вызывающий php-код. Далее в ajax можно было бы сделать следующее, чтобы получить ответ.

    $.ajax({ type : 'POST',
          data : {email: $('#email').val(), password: $('#pass').val()},
          url  : 'login.php',              
          success: function (data) {
            if(data == 'success'){  //the value echoed from php can be stored in the data variable of ajax
                window.location.assign('upload.php');
            }
            else{
                alert(data);
            }
          },
          error: function ( xhr ) {
            alert("error");
        }
    });

Вышеупомянутая концепция может быть расширена, чтобы вернуть МНОГОЯЗЫЧНЫЕ ЦЕННОСТИ. Этот метод позволяет простой перенос данных с PHP на AJAX в строковый формат.

Мы должны следовать простому шагу, чтобы повторить все, что нам нужно отправить в ответ от php на ajax, разделенный уникальным разделителем.

    echo $response.#;
    echo $email.#;
    echo $password.#;
    echo "Hello".#;
    echo "World";

Затем переменные данные в ajax могут быть просто извлечены, как в приведенном выше примере, и простую функцию типа

    var res = data.split("#");

являясь переменной внутри ajax.
Затем массив res может использоваться в js для любой цели.

За последние 24 часа нас посетили 8833 программиста и 535 роботов. Сейчас ищут 355 программистов …


  1. smartCreate

    С нами с:
    4 ноя 2016
    Сообщения:
    122
    Симпатии:
    4

    Добрый день! Проблема следующая — осуществляю загрузку изображений на сайте пользователем. Само собой для загружаемого элемента существуют некоторые ограничения — расширение файла, вес, размер. Хочу сделать что бы посетитель видел отчет по каждой из причин если они возникли, то есть «Недопустимый тип»файла, «Превышен максимальный размер» и т.д.

    Форма выглядит таким образом:

    1. <form id=«feeds» method=«post» action=«<?php echo base_url(); ?>feeds/add_feeds» enctype=»multipart/form-data»>
    2.     <input type=«text» placeholder=«Заголовок статьи» name=«title» />
    3.     <input type=«text» placeholder=«Ключ статьи» name=«key_n» />
    4.     <input type=«file» name=«userfile» />
    5.     <button type=«submit» class=«button—8»>ОПУБЛИКОВАТЬ</button>

    Сервер:

    1.     $config[‘upload_path’] = ‘./library/img/news/’;
    2.     $config[‘allowed_types’] = ‘gif|jpg|png|jpeg’;
    3.     $config[‘max_size’]    = ‘100’;
    4.     $config[‘max_width’]  = ‘1024’;
    5.     $config[‘max_height’]  = ‘768’;
    6.     $config[‘encrypt_name’]    = TRUE;
    7.     $config[‘remove_spaces’] = TRUE;
    8.     $this->load->library(‘upload’, $config);
    9.     if ( ! $this->upload->do_upload()){
    10.         $error = array(‘error’ => $this->upload->display_errors());
    11.         $this->load->view(‘pages/feeds/index’, $error);
    12.         $image_data = $this->upload->data();
    13.         $feeds[‘title’]  = $_POST[‘title’];
    14.         $feeds[‘txt’] = $_POST[‘txt’];
    15.         $feeds[‘key_n’] = $_POST[‘key_n’];
    16.         $feeds[‘img’] = $image_data[‘file_name’];
    17.         $this->main_model->new_feeds($feeds);

    Сервер написан на php-фреймворке Codignaiter, обработка и отображение ошибок происходит вот в этой части кода:

    1. if ( ! $this->upload->do_upload()){
    2.     $error = array(‘error’ => $this->upload->display_errors());
    3.     $this->load->view(‘pages/feeds/index’, $error);

    Для того что бы ошибка отображалась на страницу добавляю вот это:

    1. <?php if (isset($error)) {?>

    И если на форму не вешать аякс, что бы отправка на сервер происходила обновлением страницы, то вывод ошибок будет работать, а вот если повесить аякс, то нет…
    Конечно, в скрипте можно вывести какой-то allert с ошибкой типа «Что-то пошло не так», но это не совсем то что я хочу, обработчтк выглядит так:

    1. $(«form#feeds»).submit(function(e){
    2.         form = new FormData(this),
    3.         s = $(f.elements).last(),
    4.         e = s.end().slice(0, 2).removeClass(‘input-error’).filter(function() {
    5.             return !$.trim(this.value)
    6.     if(e.length) e.addClass(‘input-error’);
    7.             success: function(data) {
    8.                 e.removeClass(‘input-error’);
    9.                 $(«#content»).load(«feeds #content»);

    Я догадываюсь что мне каким-то образом нужно вывести вот это:

    1. <?php if (isset($error)) {?>

    здесь:

    Но, как это сделать я не понимаю, и не могу найти адекватного ответа в интернете, прошу помочь, словом или делом))


  2. Fell-x27

    Команда форума
    Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.162
    Симпатии:
    1.770
    Адрес:
    :сердА

    А в чем, собственно, проблема? Ты не знаешь, как аяксу ответ отдать, или что?
    Серверу плевать, кто его спрашивает. Он так же отдает ответ. Тебе надо просто его обработать. Отдавай в виде JSON, тогда любую структуру данных без проблем упакуешь-распакуешь.


  3. smartCreate

    С нами с:
    4 ноя 2016
    Сообщения:
    122
    Симпатии:
    4

    Именно так…, не знаю, если не сложно, подскажи пожалуйста, некогда раньше не сталкивался(


  4. Fell-x27

    Команда форума
    Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.162
    Симпатии:
    1.770
    Адрес:
    :сердА

    Для сервера запрос от аякса — это такой же запрос от браузера. Он его просто обрабатывает. И просто отдает в ответ. То есть у тебя в аякс приходит тот текст, что ты выплюнешь с сервера. Если это HTML, то там HTML. Но так не советую делать. Тебе лучше отдавать JSON с ошибкой, описанием и тд, а там уже доставать это значение на стороне JS и на страницу втыкать.


  5. smartCreate

    С нами с:
    4 ноя 2016
    Сообщения:
    122
    Симпатии:
    4

    Извини за туговатость, но у меня с синтаксисом еще плоховато из-а недостатка опыта, не мог бы помочь мне разобраться?

    Из того что ты сказал, я переделал скрипт на сервере вот таким образом:

    1.         $config[‘upload_path’] = ‘./library/img/news/’;
    2.         $config[‘allowed_types’] = ‘gif|jpg|png|jpeg’;
    3.         $config[‘max_size’]    = ‘500’;
    4.         $config[‘max_width’]  = ‘1024’;
    5.         $config[‘max_height’]  = ‘768’;
    6.         $config[‘encrypt_name’]    = TRUE;
    7.         $config[‘remove_spaces’] = TRUE;
    8.         $this->load->library(‘upload’, $config);
    9.         if ( ! $this->upload->do_upload()) exit (json_encode($error = array(‘error’ => $this->upload->display_errors())));{
    10.             $this->load->view(‘pages/feeds/index’, $error);
    11.             $image_data = $this->upload->data();
    12.             $feeds[‘title’]  = $_POST[‘title’];
    13.             $feeds[‘txt’] = $_POST[‘txt’];
    14.             $feeds[‘key_n’] = $_POST[‘key_n’];
    15.             $feeds[‘img’] = $image_data[‘file_name’];
    16.             $this->main_model->new_feeds($feeds);

    Не уверен что сделал правильно…, но в любом случаи не совсем понимаю как обработать результат в аяксе, опять же с синтаксисом разобраться не могу(


  6. Fell-x27

    Команда форума
    Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.162
    Симпатии:
    1.770
    Адрес:
    :сердА

    Тогда я тебе помочь не смогу. Синтаксис растолковывать, увы, у меня особо времени нет. Но могу дать совет — прежде чем вслепую сразу воротить что-то сложное, найди инфу по этому поводу, и собери что-нибудь простенькое, чтобы понимание пришло.

    Ну там..аяксовый скриптик, который раз в секунду обновляет циферку на экране. Пойми как это работает, и поймешь, как тебе сделать что-то сложное.


  7. smartCreate

    С нами с:
    4 ноя 2016
    Сообщения:
    122
    Симпатии:
    4

    Все не на столько плохо, я понимаю как работает аякс. До меня не как не дойдет, как условие правильно написать на сервере и как принять результат в error моего аякса, я просто банально с этим некогда не работал, даже не знаю как так вышло, но вышло. Я не прошу делать за меня или учить меня синтаксису, я просто не где не могу найти нормальную информацию, по моей проблеме. Если ты понимаешь что нужно, но нет времени объяснить или показать, скинь пожалуйста хоть материал какой-то — был бы невероятно благодарен


  8. Fell-x27

    Команда форума
    Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.162
    Симпатии:
    1.770
    Адрес:
    :сердА

    Вот и поработайте, на примере чего-то элементарного. Чтобы было не только теоретическое понимание, но и понимание механики процесса.
    Попробуйте один из примеров, лучше первый, с таймером. Он крайне наглядный. И сразу поймете, что вам делать дальше.


  9. marsik

    marsik
    Активный пользователь

    С нами с:
    30 дек 2008
    Сообщения:
    246
    Симпатии:
    17

    наверное как-то так:

    1. $(«#result»).text(‘некая ошибка’); //показываем ошибку на странице, например в <p id=»result»></p>


  10. Fell-x27

    Команда форума
    Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.162
    Симпатии:
    1.770
    Адрес:
    :сердА

    Нет. Ни то ни то. error — это если произошла реальная ошибка. Ошибка же автора приходит с кодом 200, это вполне корректный ответ сервера. Это не ошибка выполнения или запроса, это просто серверу не нравится контент, который ему передали. Результат этого запроса будет передан в success.


  11. marsik

    marsik
    Активный пользователь

    С нами с:
    30 дек 2008
    Сообщения:
    246
    Симпатии:
    17

    Ну он же получает данные в data, туда и передавать данные, типа

    1. if(data.myerror) $(«#result»).text(data.myerror);


  12. Fell-x27

    Команда форума
    Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.162
    Симпатии:
    1.770
    Адрес:
    :сердА

    Вы предлагаете ему делать это в обработчике error:function(), это неправильно и не будет работать. Код обработки должен быть в success:function(data);


  13. marsik

    marsik
    Активный пользователь

    С нами с:
    30 дек 2008
    Сообщения:
    246
    Симпатии:
    17

    Код обработки не обязательно должен быть в success:function(data) — То что ТС хочет сделать посредством php (существуют ограничения на расширение файла, вес, размер), можно проверить на js до отправки запроса через ajax


  14. Fell-x27

    Команда форума
    Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.162
    Симпатии:
    1.770
    Адрес:
    :сердА

    Безусловно. И можно и нужно. Больше предварительной валидации на клиенте — меньше холостых запросов к серверу.

    Но он хочет именно так. У него уже есть инфраструктура для этого, просто хочет синхрон на асинхрон поменять. Знаний JS нет. Есть знание жиквери-копипасты, но условное. Потом подрастет в плане навыков, перепишет по-правильному.


  15. smartCreate

    С нами с:
    4 ноя 2016
    Сообщения:
    122
    Симпатии:
    4

    Спасибо за столь активное внимание к моей теме) Дело на самом деле не в бездумном копипасте кодов джейквери. Просто есть такая штука как опыт, его мне вчера и не хватило, сегодня пол дня посидел и разобрался, вдруг кому нужно будет вот что вышло:

    1. // Условие в обработчике на сервере
    2. if ( ! $this->upload->do_upload()){
    3.         $image_data = $this->upload->data();
    4.         $feeds[‘title’]  = $_POST[‘title’];
    5.         $feeds[‘txt’] = $_POST[‘txt’];
    6.         $feeds[‘key_n’] = $_POST[‘key_n’];
    7.         $feeds[‘img’] = $image_data[‘file_name’];
    8.         $this->main_model->new_feeds($feeds);
    1. // Обработка полученного $error на клиенте
    2. success: function(data) {

    А проверяю я коректность отправляемого файла не на клиенте, не потому что делать нечего или не знаю как это сделать, а просто так уж вышло что в начале своего «пути» связался с фреймворком Codignaiter, а у этого засранца свои методы обработки и загрузки файлов, приходиться к ним приспосабливаться.

    Всем спасибо, тема закрыта ))


  16. Fell-x27

    Команда форума
    Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.162
    Симпатии:
    1.770
    Адрес:
    :сердА

    А никто не говорит, что не надо ничего проверять на сервере. Надо, еще как. Обязательно надо. Мало ли кто и что будет нам пытаться загрузить, не используя браузер. Заливание шелла под видом картиночки — это ж классика.

    НО…при этом никто не мешает первичную проверку проводить на клиенте. Это благо для всех.
    1) Клиент сразу узнаёт, что что-то не так. Ему не надо ждать, пока файл загрузится и прожуется сервером. Жители отдаленных регионов и севера скажут огромное спасибо.
    2) Серверу не надо впустую грузить файлы и проверять их. Да, все равно могут валидацию отключить на клиенте и сунуть всякое, но…это один из тысячи. И тут серверная проверка отработает как надо. А остальные 999 из тысячи некорректных запросов и вовсе не дойдут до сервера. Пусть он лучше тратит свои ресурсы на полезную нагрузку.


  17. smartCreate

    С нами с:
    4 ноя 2016
    Сообщения:
    122
    Симпатии:
    4

    Спасибо конечно) я это обязательно учту, хотя я это все и раньше знал/понимал, но повторение -мать учение, по этому спасибо что не поленился написать это разъяснение. Вопрос просто изначально не в целесообразности валидации на сервере был, а в том как ошибку при этой самой валидации показать клиенту


  18. Fell-x27

    Команда форума
    Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.162
    Симпатии:
    1.770
    Адрес:
    :сердА

    Понятное дело, но мы же беседуем. Беседа дошла до проблемы валидации, которой не все уделяют должное внимание. Более того, твоя серверная валидация с аяксом никак не исключает клиентскую поверх. Для пользователя будет выглядеть одинаково, если одинаково обыграешь в коде.

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Ошибки patrol y61
  • Ошибки p1603 p1604 p1605 toyota
  • Ошибки overrun cisco
  • Ошибки nice spin
  • Ошибки mod rewrite

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии