За последние 24 часа нас посетили 17724 программиста и 1724 робота. Сейчас ищет 931 программист ...

Проблемы с AJAX везде, кроме Firefox

Тема в разделе "JavaScript и AJAX", создана пользователем Reputation, 24 окт 2010.

  1. Reputation

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

    С нами с:
    24 окт 2010
    Сообщения:
    4
    Симпатии:
    0
    Помогите, пожалуйста, разобраться в проблеме. В файрфоксе всё отлично работает, а вот в остальных браузерах (Chrome, Opera, Safari, IE) никакого ответа. Вне .getJSON код работает везде, а вот внутри колбэка только в ФФ.

    Сразу скажу, если есть возможность подсказать в плане данной реализации (ручного создания текста json), то буду очень благодарен. Очень не хочу использовать json_encode, так как, часто переезжаю с сервера на сервер и не везде может быть современный PHP.

    Код JS:
    [js]
    $(document).ready(function(){
    if ($("#video_filter").length) {

    $.getJSON('example.php', function(data) {
    $("#video_filter").html(data.video[0].nid);
    });

    }
    });
    [/js]

    example.php:
    PHP:
    1.  
    2. //выше подключение к БД
    3. mysql_query("SET NAMES utf8");
    4. $json = "{\"video\":[";
    5.  
    6. $result = mysql_query('SELECT node_revisions.nid, node_revisions.title, node_revisions.body, term_node.tid, term_data.name FROM term_data LEFT JOIN (node_revisions LEFT JOIN term_node ON node_revisions.nid = term_node.nid) ON term_data.tid = term_node.tid LEFT JOIN node ON node_revisions.nid = node.nid WHERE node.type = "video" ORDER BY created DESC');
    7. while ($node = mysql_fetch_object($result)) {
    8. $node->body = mysql_real_escape_string($node->body);
    9. $json.= "{\"nid\":\"$node->nid\",\"title\":\"$node->title\",\"body\":\"$node->body\",\"tid\":\"$node->tid\",\"tname\":\"$node->name\"},";
    10. }
    11.  
    12. $json.="]}";
    13.  
    14. echo $json;
    15.  
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    консоль ошибок открой и посмотри что пишет =) в той же опере
     
  3. Reputation

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

    С нами с:
    24 окт 2010
    Сообщения:
    4
    Симпатии:
    0
    На всякий случай скажу, сайт на Друпале.

    Консоль в IE ругается на всякие вещи, связанные с кодом других модулей или с самим друпалом ( 'Drupal.settings.cron.runNext' - есть null или не является объектом)

    Консоль в Opere ругается только на CSS.

    Консоль в Chrome, вообще, не ругается.
     
  4. Reputation

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

    С нами с:
    24 окт 2010
    Сообщения:
    4
    Симпатии:
    0
    Для проверки в файле example.php заменил строку:
    PHP:
    1. echo $json;
    на строку:
    PHP:
    1. echo "{\"video\":[{\"nid\":\"1\",\"body\":\"2\"}]}";
    Всё заработало. Значит проблема в формировании строки. Знатоки, пожалуйста, подскажите, что неправильно я прописываю, когда формирую строку с json?
     
  5. Reputation

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

    С нами с:
    24 окт 2010
    Сообщения:
    4
    Симпатии:
    0
    Спасибо всем. Проблему решил добавлением после формирования строки следующего кода:
    PHP:
    1. $json = substr($json, 0, strlen($json)-1);
    Соответственно, проблема заключалась в запятой, которая проставлялась после каждой новой строки. После последней строки запятой быть не должно - кодом её отрезал.

    Подробно описал на случай, если кто-то будет искать решение подобной проблемы.