
12.07.2011, 22:59
|
Аспирант
|
|
Регистрация: 06.01.2010
Сообщений: 37
|
|
ajax ответ в виде булева значения
Есть Форма, есть библиотека jQuery и используемый в ней аякс.
Вводим данные в форму, на лету отправляется файлу test.php значение этого поля.
Дальше возвращается ответ, получили успешно все хорошо.
Ответ является текстом либо "Ошибка: не верные символы", либо "Успешно: вы зарегистрированы". Дальше сам вопрос.
Ответ надо разукрасить, если успешно, то зеленым цветом, если ошибка то красным.
Не прибегая к php, чисто на JS и еще момент, текст ошибки формируется у php.
Задача сводится к тому, как определить ошибка это или успешная операция.
|
|

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.
|
|

13.07.2011, 11:05
|
Аспирант
|
|
Регистрация: 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
|
|

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);
}
});
});
|
|

13.07.2011, 11:23
|
Аспирант
|
|
Регистрация: 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);
}
});
});
|
Спасибо большое 
|
|

13.07.2011, 12:20
|
Аспирант
|
|
Регистрация: 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);
}
});
});
|
|

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' => '...'
)
)
|
|

13.07.2011, 12:56
|
Аспирант
|
|
Регистрация: 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.
|
|

13.07.2011, 13:32
|
Профессор
|
|
Регистрация: 29.06.2011
Сообщений: 445
|
|
да я понял, что ты хочешь передать на сервер JSON строку. но я говорю, что это неверный подход к передаче данных, и предложил более чистый метод. но дело твое.
сериализуй свои данные в строку да и отправляй, что сложного-то.
можешь использовать json2.js, например.
JSON.stringify(object) и вперед.
|
|
|
|