Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> jquery post результат 
V
    Опции темы
w03zd8rc
Дата 10.3.2016, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 26.2.2007

Репутация: нет
Всего: нет



День добрый!
Есть php страничка add_liked.php, с неё возвращается результат:
Код

echo json_encode(array("result"=>$result));

 Данные передаются GET запросом (add_liked.php?ID=1)

Делаю на основной странице запрос к этой страничке:
Код

function addtoliked (ids, parent_link) 
{    
    $.post("add_liked.php?ID="+ids, function(data) {                    
        respons = data.result;
        $("#liked").html("parent_link: "+parent_link+"<br/>res: "+respons);                    
        fill_div_liked();
        if (respons == 1)
        {    
            alert(respons);
            $(parent_link).css("color","yellow");
        }
        if (respons == 2)
        {
            alert(respons);
            $(parent_link).css("color","blue");
        }
    }, "json");        
}    


По коду основной страницы есть куча эллементов с ID star1, star2, star3...., у каждого style='color:yellow;' или style='color:blue;'.
Ссылка, запускающая функцию:
Код

<a title='Добавить в избранное' href='#' onclick="addtoliked(1,'#star1')">


Суть проблемы:
Функция запрос делает верно, страница (add_liked.php) отрабатывает как надо, но когда получает результат и я его пытаюсь обработать (if (respons == 1)) - эта часть сравнений результата не отрабатывает или отрабатывает только один раз.


PM MAIL   Вверх
w03zd8rc
Дата 10.3.2016, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 26.2.2007

Репутация: нет
Всего: нет



Блин, извините, ошибка закралась незаметно %)
Из add_liked.php возвращаю 0 или 1, а ожидаю в скрипте 1 или 2 ))))))
Всё работает
PM MAIL   Вверх
_zorn_
Дата 12.3.2016, 06:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1076
Регистрация: 21.8.2007

Репутация: 1
Всего: 12



Мне всегда было интересно почему не использовать true/false если ожидается удача/неудача.
Просто почему отреагировал - разбираю тут чужой древнючий скрипт, так там тоже 1 или 2. 
ПОЧЕМУ и ЗАЧЕМ ? 
Вы сами потом вспомните через пару месяцев  что if (veryImportantCheck()) всегда будет отрабатывать?

PM MAIL   Вверх
w03zd8rc
Дата 12.3.2016, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 26.2.2007

Репутация: нет
Всего: нет



Цитата(_zorn_ @ 12.3.2016,  04:52)
Мне всегда было интересно почему не использовать true/false если ожидается удача/неудача.
Просто почему отреагировал - разбираю тут чужой древнючий скрипт, так там тоже 1 или 2. 
ПОЧЕМУ и ЗАЧЕМ ? 
Вы сами потом вспомните через пару месяцев  что if (veryImportantCheck()) всегда будет отрабатывать?

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

Не буду плодить темы, напишу тут.
Всё та-же картина, запрос к другой странице:
Код

function add_to_first (msg)
{
    countchildren = document.getElementById('history_ul').childNodes.length;
    if (countchildren >= 13)
    {
        $('#history_ul li:last-child').remove();
    }
    ul = document.getElementById("history_ul");
    li = document.createElement("li");
    li.className = "list-group-item";
    li.appendChild(document.createTextNode(msg));
    $('#history_ul').prepend(li);
}            
function load_history () 
{
    $.post("reading.php", function(data) {                    
        add_to_first(data.ID);
    }, "json");
}

$(document).ready( function () {
    SetInterval("load_history()",1000);
});


Не отрабатывает. Если уберу "json" - то приходят данные нормально:
Код

{"ID":"502","Date":"2016-03-12 12:30:29","Icon":"glyphicon glyphicon-arrow-left","Color":"green"}

вставляются куда надо, а вот если json пытаюсь - то кукиш. Т.е. даже если я делаю так:
Код

function load_history () 
{
$.post("reading.php", function(data) {                    
    add_to_first(data);
    var obj = jQuery.parseJSON(data);            
    add_to_first(obj.ID);
    });
}

то отрабатывает ровно до 5 строки

Firebug выдаёт ошибку:
SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data

Только непонятно, что ему не нравится.
Передаю таким образом:
Код

echo json_encode(array("ID"=>$tmp['ID']));

Уходит всё верно, да и приходит тоже: {"ID":"502"}, до этого момента точно такие-же конструкции работают нормально

Это сообщение отредактировал(а) w03zd8rc - 12.3.2016, 11:19
PM MAIL   Вверх
ksnk
Дата 12.3.2016, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Цитата(w03zd8rc @  12.3.2016,  10:49 Найти цитируемый пост)
 Если уберу "json" - то приходят данные нормально:

А обработчик один и тот же на оба варианта?
В случае json приходит объект, а так - строка.
Просто встань в отладчике на 5 строку и посмотри.

Можно залечить эту строку  примерно так
Код

var obj= typeof(data)=='string'?Query.parseJSON(data):data;

Ну и  try catch не помешает расставить... 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
_zorn_
Дата 12.3.2016, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1076
Регистрация: 21.8.2007

Репутация: 1
Всего: 12



Цитата(w03zd8rc @  12.3.2016,  17:49 Найти цитируемый пост)
потому-что варианта, возвращаемого скриптом, не два

Т.е. функция theBestCheck возвращает не пойми что и я должен весь код просматривать ?
В топку биореактора такой код...

PM MAIL   Вверх
w03zd8rc
Дата 14.3.2016, 06:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 26.2.2007

Репутация: нет
Всего: нет



Цитата(ksnk @ 12.3.2016,  09:38)
А обработчик один и тот же на оба варианта?
В случае json приходит объект, а так - строка.
Просто встань в отладчике на 5 строку и посмотри.

Со скрипта отправка идёт след образом:
Код

echo json_encode(array("ID"=>$tmp['ID']));

Ну и если просто в адр строке зайти на этот php скрипт то получаем ответ: {"ID":"506"}
Цитата(ksnk @ 12.3.2016,  09:38)
Ну и  try catch не помешает расставить...

странно, но try catch не отрабатывает.... Т.е. следующий код:
Код

try
{
    $.post("reading.php", function(data) {          
        add_to_first(data.ID);
    }, "json");
} catch(e) {
    alert(e.name + ":" + e.message + "<br/>" + e.stack);
}

никакие алерты не отсылает, ровно как и следующий:
Код

try
{
    $.post("reading.php", function(data) {    
        add_to_first(data);
        var obj = jQuery.parseJSON(data);            
        add_to_first(obj.ID);
    });
} catch(e) {
    alert(e.name + ":" + e.message + "<br/>" + e.stack);
}

после выполнения 4й строки - тишина...
Цитата(ksnk @ 12.3.2016,  09:38)
Код

var obj= typeof(data)=='string'?Query.parseJSON(data):data;


Тоже самое - тишина, никаких данных.
Может php скрипт както ппо особому должен возвращать данные?
Фактически, 2 скрипта:
1:
Код

    echo json_encode(array("result"=>$result));

2:
Код

    echo json_encode(array("ID"=>$tmp['ID']));


и обработка результатов:
1:
Код

$.post("add_liked.php?ID="+ids, function(data) {                    
    respons = data.result;
    fill_div_liked();
    if (respons == 1)
    {    
        $(parent_link).css("color","blue");
    }
}, "json");        

2:
Код

$.post("reading.php", function(data) {             
    add_to_first(data.ID);
}, "json");

а результат: первый выполняется, второй нет....

Это сообщение отредактировал(а) w03zd8rc - 14.3.2016, 06:30
PM MAIL   Вверх
ksnk
Дата 14.3.2016, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Цитата(w03zd8rc @  14.3.2016,  06:26 Найти цитируемый пост)
Ну и  try catch не помешает расставить...

Это я сказал не разобравшись, что для разбора json используется jQuery, а не объект JSON. JSON.parse выбрасывает исключение, когда строка  с ошибкой, а jQuery в этом случае возвращает null.
Использовать try catch для проверки post не нужно, так как сам пост всегда отработает правильно. Выполняется он, обычно, асинхронно и только дергает свои коллбяки.

"правильная" функция должна бы выглядеть от так (был пропущен символ о в jQuery)
Код

var obj= typeof(data)=='string'?jQuery.parseJSON(data):data;


Но все равно, оба этих совета - "мимо"

Нужно объяснить про отладчик в Chrome? С ним многие вещи становятся видны сразу, после прохода построчно по коду. Просто поставь точку останова в callback для post.
Сейчас складывается такое ощущение, что используется что-то типа IE и отладка методом научного тыка.



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
w03zd8rc
Дата 14.3.2016, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 26.2.2007

Репутация: нет
Всего: нет



Всё было куда прозаичней....
В начале скрипта выполняется 
Код

include 'settings.php';

Так вот, он и "вносил" лишний символ. Пересохранил его в кодировке utf8 без BOM - всё встало на свои места %)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0517 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.