Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Что должен вернуть Аякс при при отправки такой формы?
Форумы портала PHP.SU » Клиентская разработка » JavaScript & VBScript » Что должен вернуть Аякс при при отправки такой формы?

Страниц (1): [1]
 

1. Алексей_М - 28 Января, 2016 - 22:15:26 - перейти к сообщению
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. $.ajax({
  3. type: 'POST',
  4. url: 'ok.php',
  5. data: $("#forma1").serialize(),
  6. success: function(data) {
  7. if(data == "true") {
  8.  


разбираюсь с аяксом, подскажите пожалуйста, что прописать в ok.php чтобы в data отдать true?
2. DelphinPRO - 28 Января, 2016 - 22:48:32 - перейти к сообщению

(Добавление)
Но лучше сделать так

CODE (javascript):
скопировать код в буфер обмена
  1. $.ajax({
  2. type: 'POST',
  3. url: 'ok.php',
  4. dataType: 'json', // тип возвращаемых данных
  5. data: $("#forma1").serialize(),
  6. success: function(data) {
  7. if(data.status == true) {


и в php

PHP:
скопировать код в буфер обмена
  1. $response = [];
  2. $response['status'] = true;
  3. $response['message'] = 'Ok!'; // Можно передать дополнительные данные
  4. echo json_encode($response);
3. Алексей_М - 28 Января, 2016 - 23:06:07 - перейти к сообщению
странно, у меня какая-то ерунда получается,

файл обработчик ok.php
PHP:
скопировать код в буфер обмена
  1.  
  2. echo "true";
  3. $file = fopen("test.txt","a");
  4.  
  5. fwrite ($file,"123\n");
  6.  
  7.  


если к нему просто обратится, выводит true на экран через echo

если как полагается дёрнуть его через форму, то он не видит true
т.е. условие когда data = true срабатывает только если сделать принудительно что не равно

т.е.

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2.  
  3. success: function(data) {
  4. if(data !== "true") {
  5.        
  6. вот тогда оно выполнится
  7.  
  8.  



как это так??) хотя сам обработчик в файл пишет!
4. Viper - 28 Января, 2016 - 23:30:18 - перейти к сообщению
Алексей_М пишет:
условие когда data = true
а с чего бы.
1. у вас строка в ответе
2. http://javascript[dot]ru/comparison-operators
3. переделайте как показал DelphinPRO
5. Алексей_М - 28 Января, 2016 - 23:41:29 - перейти к сообщению
Viper

в смысле строка в ответе? так он же и посоветовал Echo 'true';
я и сравниваю
и так
if(data == "true")
и без кавычек
if(data == true)

всё равно не видит

как посоветовал, вообще даже не запускается тогда обработчик,

и
$response = [];

наверно надо так? $response = array();
6. DelphinPRO - 29 Января, 2016 - 00:20:05 - перейти к сообщению
Поясняю.
По умолчанию в настройках аякса жуйкверевского стоит тип возвращаемых данных "html". Т.е. это просто строка текста. Соответственно, чтобы вывести такой тип данный в php, достаточно просто сделать echo "строка". И со стороны javascript в коллбеке тоже будет строка. Поэтому сравнивать следует со строкой. Этот тип данных достаточно неудобен для того, чтобы управлять вариантами выполнения кода в javascript.

Гораздо лучше использовать тип "json".
В этом случае php должен отдавать валидный json-код, а jquery его незаметно для вас преобразует в объект, с которым удобно работать.
Получить валидный json-код на стороне php проще всего специально предусмотренной для этого функцией json_encode(). Ей можно передать массив (или объект) с данными, и впоследствии получить точно такой же массив в javascript. Почему это удобнее? Да потому что можно передать кучу разных данных, разных типов (строки, числа, булевые значения), и иметь к ним раздельный доступ.

По-моему здесь всё предельно просто.

Алексей_М пишет:
$response = [];
наверно надо так? $response = array();

Если у вас php версии до 5.3, то да, короткий синтаксис массивов там не поддерживается.
7. Алексей_М - 29 Января, 2016 - 00:42:42 - перейти к сообщению
DelphinPRO

да, php 5.2.17, короткий не поддерживается.

может еще что-то не поддерживается, потому что не работает?

есть возможность как-то проверить получении ответов вообще в принципе?
потому что обработчик всё выполняет (запись в файл), но ответ не передаёт или не ловит.

к тому же покрутил разные скрипты аяксовские, на одном хостинге работают (не Ваш и не мой пример, а просто другие), а на другом пишет например:
SyntaxError: JSON.parse: unexpected character

причём скрипты одинаковые!

возвращаясь к началу, можно упрощённо проверить обратку от обработчика, потому что ни мой ни Ваш вариант не работает.
8. IllusionMH - 29 Января, 2016 - 00:56:37 - перейти к сообщению
Алексей_М, открываете дев тулы в браузере (Ctrl + Shift + I или F12), делайте Ajax и смотрите что возвращает сервер. Там будет виднее
9. Алексей_М - 29 Января, 2016 - 00:58:11 - перейти к сообщению
да нет что-то

если заменить старый код

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2.  
  3. $.ajax({
  4. type: 'POST',
  5. url: 'ok.php',
  6. data: $("#forma1").serialize(),
  7. success: function(data) {
  8. if(data == "true") {
  9.                        
  10.  



на предлагаемый:

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2.  
  3. $.ajax({
  4. type: 'POST',
  5. url: 'ok.php',
  6. dataType: 'json',                              
  7. data: $("#forma1").serialize(),
  8. if(data.status == true) {
  9.          
  10.  


то файл ok.php даже не дёргает при субмите форму
и при не заполенных полях формы даже не выделяются поля красным (мол ошибка), при моём варианте выделяются.

может и тут старая версия?
jquery-2.0.0.min.js
10. IllusionMH - 29 Января, 2016 - 01:10:52 - перейти к сообщению
Алексей_М, если второй блок кода - копипаста, то там не хватает
CODE (javascript):
скопировать код в буфер обмена
  1. success: function(data) {


Главное что в консоле барузера пишет
11. DelphinPRO - 29 Января, 2016 - 01:23:59 - перейти к сообщению
Алексей_М пишет:
то файл ok.php даже не дёргает при субмите форму
и при не заполенных полях формы даже не выделяются поля красным (мол ошибка), при моём варианте выделяются.


Вы в консоль браузера-то заглядывайте иногда. Там отображаются все сообщения об ошибках. И такие ляпы сразу можно найти.
12. Алексей_М - 29 Января, 2016 - 01:33:15 - перейти к сообщению
IllusionMH точно! всю голову сломал, а оказывается...

да, так работает, спасибо большое!

там где выдавал SyntaxError: JSON.parse: unexpected character
там PHP 5.1.2 без jsone вроде

DelphinPRO благодарю!
Ваш пример получился.
Правда как строки сравнить, по примитивному примеру, пока не ясно, хоть и не нужно, но просто интересноУлыбка

 

Powered by ExBB FM 1.0 RC1