Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.07.2011, 22:59
Аспирант
Отправить личное сообщение для vanek2010 Посмотреть профиль Найти все сообщения от vanek2010
 
Регистрация: 06.01.2010
Сообщений: 37

ajax ответ в виде булева значения
Есть Форма, есть библиотека jQuery и используемый в ней аякс.
Вводим данные в форму, на лету отправляется файлу test.php значение этого поля.
Дальше возвращается ответ, получили успешно все хорошо.
Ответ является текстом либо "Ошибка: не верные символы", либо "Успешно: вы зарегистрированы". Дальше сам вопрос.
Ответ надо разукрасить, если успешно, то зеленым цветом, если ошибка то красным.
Не прибегая к php, чисто на JS и еще момент, текст ошибки формируется у php.
Задача сводится к тому, как определить ошибка это или успешная операция.
Ответить с цитированием
  #2 (permalink)  
Старый 12.07.2011, 23:13
Профессор
Отправить личное сообщение для ваый Посмотреть профиль Найти все сообщения от ваый
 
Регистрация: 29.06.2011
Сообщений: 445

на мой вкус, лучше всего присылать ответ в виде json, скажем, в каком-то подобном виде:
die(json_encode(array(
    'error' => false, // или 0/1
    'message' => 'Успешно: вы зарегистрированы'
)))

тогда проверить на наличие ошибки гораздо проще:
$.post('test.php', $form.serialize(), function(data) {
    if (data.error) {
        // ошибка
        return;
    }

    // ok
});

А в том виде, в котором это делаешь ты - это, конечно, плохой вариант, потому как ничего кроме как проверять в js, что у тебя за строка пришла и не остается. А если завтра решишь поменять текст ошибки, то придется править js код тоже, что хреново вдвойне.

Последний раз редактировалось ваый, 12.07.2011 в 23:21.
Ответить с цитированием
  #3 (permalink)  
Старый 13.07.2011, 11:05
Аспирант
Отправить личное сообщение для vanek2010 Посмотреть профиль Найти все сообщения от vanek2010
 
Регистрация: 06.01.2010
Сообщений: 37

Спасибо, не подскажите, почему возвращаемые в ответе от test.php данные, js не понимает?
Вот что приходит от test.php:
{"error":1,"message":"\u0423\u0441\u043f\u0435\u0448\u043d\u043e: \u0432\u044b \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b"}

Потом я хочу просто вывести в Alert, проверить.
$('#test_submit').click(function() {
	$.ajax({
		type: 'POST',
		url:  'test.php',
		data: 'test=15',
		success: function(data){					
				 	$('#test').html(data.error);
			     }
	});	
});

И по идеи на экран должно выйти 1, но выходит как не определенность undefined
Ответить с цитированием
  #4 (permalink)  
Старый 13.07.2011, 11:14
Профессор
Отправить личное сообщение для ваый Посмотреть профиль Найти все сообщения от ваый
 
Регистрация: 29.06.2011
Сообщений: 445

ну судя по всему ответ сервера не интерпретируется как json (что выводит console.log(data)?). тут два варианта. либо добавить на стороне php перед отправкой данных заголовок
header('Content-type: application/json')
либо на стороне клиента сообщить jquery, что мы ожидаем получить json:
$('#test_submit').click(function() {
    $.ajax({
        type: 'POST',
            url:  'test.php',
            data: {test: 15},
            dataType: 'json', // <--- мы хотим JSON
            success: function(data){					
                $('#test').html(data.error);
            }
    });	
});
Ответить с цитированием
  #5 (permalink)  
Старый 13.07.2011, 11:23
Аспирант
Отправить личное сообщение для vanek2010 Посмотреть профиль Найти все сообщения от vanek2010
 
Регистрация: 06.01.2010
Сообщений: 37

Сообщение от ваый Посмотреть сообщение
ну судя по всему ответ сервера не интерпретируется как json (что выводит console.log(data)?). тут два варианта. либо добавить на стороне php перед отправкой данных заголовок
header('Content-type: application/json')
либо на стороне клиента сообщить jquery, что мы ожидаем получить json:
$('#test_submit').click(function() {
    $.ajax({
        type: 'POST',
            url:  'test.php',
            data: {test: 15},
            dataType: 'json', // <--- мы хотим JSON
            success: function(data){					
                $('#test').html(data.error);
            }
    });	
});
Спасибо большое
Ответить с цитированием
  #6 (permalink)  
Старый 13.07.2011, 12:20
Аспирант
Отправить личное сообщение для vanek2010 Посмотреть профиль Найти все сообщения от vanek2010
 
Регистрация: 06.01.2010
Сообщений: 37

А еще вопрос, как отправить данные на файл test.php в формате json?
Я отправляю как-то не верно.
Мне надо чтобы в массиве $_POST['phpgo'] была строка такого вида { "firstName": "Ivan", "lastName": "Ivanov" }.
А потом я просто сделаю json_decode($_POST['phpgo']) и перенесутся значения в ассоциативный массив.
Как тут передать правильно?

$('#test_submit').click(function() {
	var phpgo = { "firstName": "Ivan", "lastName": "Ivanov" };
	$.ajax({
		type: 'POST',
		url:  'test.php',
		data: phpgo,
		dataType: 'json',
		success: function(data){
				 	$('#test').html(data);
			     }
	});
});
Ответить с цитированием
  #7 (permalink)  
Старый 13.07.2011, 12:32
Профессор
Отправить личное сообщение для ваый Посмотреть профиль Найти все сообщения от ваый
 
Регистрация: 29.06.2011
Сообщений: 445

а чем не устраивает сам массив POST, который уже и так ассоциативный?
может проще (и логичнее) правильно назвать элементы формы?
скажем:
<form method="post">
    <input type="text" name="*!*user[firstName]*/!*">
    ...
    <input type="text" name="*!*user[lastName]*/!*">
    ...
в таком случае в POST массиве будет что-то подобное
array(
    'user' => array(
        'firstName' => '...',
        'lastName' => '...'
    )
)
Ответить с цитированием
  #8 (permalink)  
Старый 13.07.2011, 12:56
Аспирант
Отправить личное сообщение для vanek2010 Посмотреть профиль Найти все сообщения от vanek2010
 
Регистрация: 06.01.2010
Сообщений: 37

Это немножко не то. Вот схожий вопрос.
http://forum.php.su/topic.php?forum=1&topic=3592
Только он изначально уже получил в $str строку с json. Мне бы тоже самое, как получить на test.php строку с json
Все в принципе сделал вот так.

$('#test_submit').click(function() {
	var testphp = { "firstName": "Ivan", "lastName": "Ivanov" };
	$.ajax({
		type: 'POST',
		url:  'test.php',
		data: {'testphp': testphp},
		dataType: 'json',
		success: function(data){

				 	$('#test').html(data);
			     }
		});

	
	});

Последний раз редактировалось vanek2010, 13.07.2011 в 13:05.
Ответить с цитированием
  #9 (permalink)  
Старый 13.07.2011, 13:32
Профессор
Отправить личное сообщение для ваый Посмотреть профиль Найти все сообщения от ваый
 
Регистрация: 29.06.2011
Сообщений: 445

да я понял, что ты хочешь передать на сервер JSON строку. но я говорю, что это неверный подход к передаче данных, и предложил более чистый метод. но дело твое.
сериализуй свои данные в строку да и отправляй, что сложного-то.
можешь использовать json2.js, например.
JSON.stringify(object) и вперед.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AJAX обращение к файлу php и получение значения zeraid jQuery 8 28.03.2011 14:46
ajax как присвоить переменной полученый ответ html sergioc AJAX и COMET 4 30.11.2010 13:52
Ajax не возвращает ответ. AlThar jQuery 2 16.02.2010 02:40
возврат увеличенного значения AJAX mikeles AJAX и COMET 0 31.10.2009 08:48
Ajax - JSON - не распознает пришедший ответ Майский Кот jQuery 1 14.05.2009 00:40