Showing posts with label js. Show all posts
Showing posts with label js. Show all posts

May 3, 2010

Ошибка Javascript «Invalid label» при обработке выдачи json_encode

Если javascript-консоль при обработке JSON-результата работы PHP-функции json_encode() выдаёт ошибку «Invalid label», обработайте JSON-строку через eval следующим образом:

var json = element.getAttribute('rel');
var resultObject = eval( "(" + json + ")" );

Здесь я получаю json-строку из аттрибута rel какого-либо элемента. Сама строка была вписана туда в процессе генерации страницы той самой функцией json_encode().

May 2, 2010

Ошибка Javascript «Expected identifier» в IE

Как выяснилось, причиной является работа с переменной, имя которой совпадает с заранее зарезервированным разработчиками Internet Explorer. Например, в моей ситуации ошибку «Expected identifier» вызвала следующая функция:

function someFunction(class) {
alert(class);
// "class" является зарезервированным названием в Internet Explorer
// поэтому мы получаем ошибку «Expected identifier»
// "class" is reserved name in Internet Explorer
// so we get «Expected identifier» error
}


Вывод: по возможности старайтесь не использовать для именования переменных какие-либо стандартные названия, а заменять их на что-то более конкретное, например "className" вместо "class" в моей ситуации.

P.S. забавное совпадение :)

April 30, 2010

Ошибка «FancyUpload2 is not a constructor»

Эта ошибка может возникнуть при попытке использовать загрузчик FancyUpload и забрать немало времени на выявление своих причин. А всё на самом деле просто: важно подгружать javascript'ы в определённом порядке:

  1. mootools.js

  2. Fx.ProgressBar.js

  3. Swiff.Uploader.js

  4. FancyUpload2.js


English: for FancyUpload to work, you should load javascripts in listed before order.

February 12, 2010

Ошибка c00ce56e в IE8 (не удалось завершить действие)

Сегодня IE8 выдал ошибку:
Не удалось завершить действие. Ошибка c00ce56e.
В режиме отладки удалось выяснить, что остановка происходит в файле mootools.js на символе 178 из 328-й cтроки. Решение оказалось как всегда простым и неожиданным: необходимо в .htaccess добавить (или же исправить если уже имеется) следующую строку:
AddDefaultCharset UTF-8
Обращаю внимание, что UTF-8 именно большими буквами. И следите чтобы глубже по каталогам не было другого .htaccess, перезаписывающего настройку.

November 5, 2009

Как работает Facebook, презентация.

Конечно же нам не дадут исходники Facebook'а, но кое-что интересное расписано. С этой презентацией стоит ознакомиться.

September 26, 2009

Object doesn’t support this property or method и Mootools

Столкнулся вот с такой ошибкой: при нажатии на ссылку с функцией, повешенной на onclick, в Internet Explorer 8 вылетает ошибка. Быдлоотладчик укзывает на файл mootools.js в строку с window.fireEvent('domready'), в консоли пишет Object doesn’t support this property or method, и останавливает все сценарии.
Как выснилось, причиной ошибки является наличие на странице функции с именем, совпадающим с id элемента. То есть:
function lightBox(params) {
var e = document.createElement('div');
e.setAttribute('id', 'lightBox');
...
}
Приводит к Object doesn’t support this property or method.
В принципе, вывод ошибки в такой ситуации логичен.
Ещё один плюс к утвеждению что местами тупит не IE, а web-разработчик...

May 10, 2009

Как добавить поиск с автозаполнением Яндекса на сайт

Функция автозаполнения на сайте состоит из трёх компонентов: клиентской части (стили и скрипты, запрашивающие и отрисовывающие предположения по мере набора текста), серверной части, осуществляющей поиск в БД и/или запрос к поисковой системе, и собственно интерфейса поисковой системы (если решено её использовать). В своё время в качестве последнего компонента я решил выбрать Яндекс.

Я подсмотрел какие AJAX-запросы и куда отправляются по мере набора запроса на сайте Яндекса. Единственная сложность возникла лишь в том, что он возвращает данные в нестандартном формате, который становится уж более-менее ликвидным JSON'ом после замысловатых манипуляций, любезно подсказанных Alternator'ом на форуме nulled.ws, за что ему большое спасибо.

На клиентской стороне было решено поставить Autocompleter, разработанный Digitarald'ом. Безусловно, можно написать и собственный обработчик, но и этот вполне справляется.

Серверная часть. Для начала получим предположения, затем выполним над ними манипуляции, и в результате получим массив PHP. Получился эдакий скрипт преобразования предположений Яндекса в PHP массив:
<?php
$file=file_get_contents("http://suggest.yandex.ru/suggest-ya.cgi?ct=text/html&part=".urlencode($_REQUEST['value'])."&v=2");
$file=strrchr($file,"[");
$file=substr($file,0,strpos($file,"]"))."]";
$file=iconv("CP1251","UTF-8",$file);
$data=json_decode($file);
header("Content-type: text/html; charset=utf-8");
foreach($data as $key=>$val){
print '<li>'.$val.'</li>';
}
?>

В скрипт передаётся переменная $value, в которой содержится набираемый текст. Она ловко подставляется в запрос, по которому мы получаем список предположений. Затем, мы преобразовываем их в формат JSON, понятный функции json_decode(), посредством которой мы и разобьём всё это богатство в полноценный PHP-массив. Однако, прежде чем это сделать, в четвёртой строке полученные в windows-1251 данные перекодируются в понятную json'у utf-8. Шестой строкой объявляется та самая utf-8, начиная со следующей строки мы можем свободно в зависимости от ситуации управлять массивом. Как я уже сказал выше, этот скрипт передаёт данные autocompleter'у, посему адаптируем их под него.
Ну и напоследок классика жанра в качестве примера работы скрипта на одном моём сайте:


UPD от 15.02.2011: Уважаемый Глеб, обновил пост. Ещё подробнее дополню позже. Спасибо за отзыв!