javascript: вопросы новичка
5937
18
Здравствуйте!

Опыта программирования на javascript нет, но вот приходится писать на нем некоторые вещи, по ходу дела возникает куча вопросов, так как времени детально разобрать все языковые конструкции нет к сожалению:хммм:. Большинство ответов можно нагуглить, но вот одна проблемка никак не поддается:хммм:. На стороне сервера крутится fcgi-ка, которая по get-запросу что-то делает и отсылать ответ о своих деяниях в формате json. Пишу в скрипте:
$.getJSON(url, function(data) {
...
return true;
});

url - это строчка с адресом fcgi-ки. Если эту строку распечатать и скопировать в строку браузера, fcgi-ка отрабатывает. А из скрипта - никак, хоть стреляйся, в логах апача ничего о попытке дернуть fcgi-ку нет. Как все же заставить javascript вызвать ее?
Infinity_nsu
1. js код работает?
2. ошибки в js консоли?
3. $.getJSON(url) - так тоже не работает?
4. запрос делается на тот же самый сервер где находится страница?
5. переписать через .ajax() ?
Infinity_nsu
6. в firebug тоже не видно что запрос улетает до url?

по туториалу работает:

серверная часть:

<?php
$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);

echo json_encode($arr);

клиентская часть:

<script type="text/javascript">
jQuery.noConflict();

jQuery(document).ready(function(){
jQuery.getJSON("json.php", {1:1}, function(data){
alert("JSON Data: " + data.a);
});
});
</script>
IEEE
1. Да, если закомментить попытку достучаться до cgi-ки, то все выполняется.
2. Где эта консоль?:смущ:Проверяю в фаерфоксе со включенным фаербагом, про ошибки ничего не пишет.
3. Тоже
4. да
5. не пробовала так, не знакома с ajax'ом :dnknow: . А через js вообще никак?:хммм:
Infinity_nsu
1. А как Вы видите что выполняется? Если алерт вставить после Вашего куска кода(не комментируя его) он появится?
2. CTRL + SHIFT + J - это консоль, очистите её, обновите web страницу с JS кодом, смотрите Errors
...
5. Это тоже самое, я имею ввиду http://stackoverflow.com/questions/3506208/jquery-ajax-cross-domain
6. в FireBug'e cмотрите вкладку Net - там отдельно строкой должен появится запрос к Вашей cgi-ке

я думаю, что дело в п.2 , нужно смотреть ошибки JS в браузере
Infinity_nsu
url на том же домене находится, что и страница?
IEEE
Консоль пишет $ is not defined. На JQuery так же ругается... Что-то проинициализировать надо?
Mad_Dollar
Все находится на локалхосте.
Infinity_nsu
Консоль пишет $ is not defined.
в этом причина, значит файл с Jquery или не добавлен на страницу или добавлен не правильно.

Вставьте на http://pastebin.com/ весь html и покажите.
Infinity_nsu
У вас не подключена Jquery библиотека


<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>

тут идет ваш код.

IEEE
Большое вам спасибо, разобралась, подключала
<script src="js/jquery.js"></script>

вместо
<script src="js/jquery.min.js"></script>

:улыб:
Towahawk, вам тоже большое спасибо!

Теперь еще вопрос: ставлю брейкпойнт на сточку с getjson, запускаю скрипт, на брейкпонте нажимаю в отладчике на сделать шаг на следующую инструкцию, потом выполнить скрипт до конца, тогда fcgi-ка отрабатывает. Если просто скрипт запустить без отладки или не ставить брейкпойнтов - нет:хммм:. С чем это может быть связано?
Infinity_nsu
а в чем вы брейкпоинт ставите?
Infinity_nsu
Чудес не бывает, код или работает или нет, вопрос в том как Вы интерпретируете результат.
IEEE
Не, я понимаю, что не бывает:улыб:. Но бывает так, что при дебаге и просто при выполнении по-разному инициализируются переменные, или играет роль задержка, которая возникает при поставленном брейкпойнте, но джаваскрипт вроде как весь в одном потоке выполняется... Сужу по логу, моя cgi-ка при старте рапортует об этом в лог и после исполнения тоже. Так вот в одном случае сообщения в логе есть, в другом пусто, причем ситуация стабильно воспроизводится при описанных условиях.
Infinity_nsu
Смотрите по запросам в FireBug'e на вкладке Net дергается ли урл. Если дергается, но функция в getjson реального ничего не сделала (не вызвался алерт, например), то JSON не валидный.
Infinity_nsu
можете написать что возвращает ваш скрипт по адресу url? какой формат?
Towahawk
До последнего буду надеяться, что человек прочитал доку на $.getJSON. :-)
Такое поведение (когда call-back функция не выполняется) может быть, когда полученный из url JSON не валиден.
Infinity_nsu
Ставьте брейкпоинт внутри функции которая принимает результат и там уже смотрите, что пришло с сервера.