Webmaster общности: Predpriemach.com | SearchEngines.bg

    Използване на Ajax и JSON

    Безплатни AJAX уроци

    Автор: F1r3Fl3x

    Често наричан „наследника на XML“, JSON ( Javascript Object Notation ) не е нищо повече от един прост формат, чрез който се разменя информация между браузъра и сървъра. JSON е ‘открит’ от Douglas Crockford и е базиран на подмножество на езика Javascript.
    Въпреки че синтаксисът може да е познат на много програмисти на C, C++, C#, Java, JavaScript, Perl, Python, и много други, JSON е напълно независим от реализацията на езика.

    Стига толкова скучна история. Тук започва същинската част.

    Ето пример за обект:

    var obj = {};

    Не изглежда кой зне какво, но в тези къдрави скоби можете да съхраните всичката информация, която ви е нужна.

    Дефиниране на обекти
    В по-стари Javascript приложения може да срещнете дефиниране на обект от този тип:

    var json = new Object();

    Този начин се използва много рядко. Повечето програмисти пестят код, като го дефинират чез две къдрави скоби.

    var json = {};

    Javacsript обектите се структорират под формата индекс/стойност.

    var json = {
    'google' : 'търсачка',
    'gmail' : 'поща',
    'www' : 'всичко'
    };
    
    alert( json.google ); //Ще извади 'търсачка'
    alert( json.gmail ); // Ще извади 'поща'
    alert( json.www ); // Ще извади 'всичко'

    Обектите могат да приемат за стойност и масиви.
    Масивите в Javascript се дефинират по 2 начина:

    var array = new Array();
    var array = [];

    Както и при обектите, по-краткият начин се използва по-често. Разликата между масиви и обекти е, че масивите могат да приемат данни по модела индекс/ключ, така и само ключ:

    var arr = [
    'Google',
    'Wikipedia',
    [ 'Yahoo', 'Gmail' ]
    ];
    
    arr[ 'asociativen_test' ] = 'raboti';
    
    alert( arr[0] ); //Ще извади Google
    alert( arr[1] ); //Ще извади Wikipedia
    alert( arr[2][0] ); //Ще извади Yahoo
    alert( arr[0][1] ); //Ще извади Gmail
    alert( arr['asociativen_test'] ); // Ще извади 'raboti'

    Ето пример за малко по-сложен обект със масиви:

    var employees = {
    "accounting" : [ //accounting е масив във обекта employees
    { "firstName" : "John", //Първият елемент в масива е обект
    "lastName" : "Doe",
    "age" : 23 },
    { "firstName" : "Mary", // Вторият елемент в масива е обект
    "lastName" : "Smith",
    "age" : 32 }
    ], // Край на масива accounting.
    
    "sales" : [ // Sales е още един масив във employees.
    { "firstName" : "Sally",
    "lastName" : "Green",
    "age" : 27 },
    
    { "firstName" : "Jim",
    "lastName" : "Galley",
    "age" : 41 }
    ] // Край на масива sales
    }; // Край на обекта Employees
    
    alert( employees.sales[0].firstName + ' ' + employees.sales[0].lastName ); //Ще извади мето и фамилията на първият работник от sales: 'Sally Green'
    
    
    alert( employees.accounting[1].firstName + ' ' + employees.accounting[1].lastName ); //Ще извади мето и фамилията навторият работник от accounting: 'Mary Smith'
    

    Обработване наполучени данни
    Ето един пример:

    var json_data = "someVar = { 'kote': 'Miau', 'Ku4e': 'bau' }"; //Да приемем, че този текст сме го получили от сървъра чрез аякс заявка
    eval( json_data ); //функцията eval изпълнява код, даден под формата на стринг
    alert( someVar.dog ); //Ще извадо 'bau'

    Този метод е прост и ефективен, но има възможност от хакерска атака. Създателят на JSON е предоставил лесен за използване начин за обезопасяване на изпълненият код.
    Всичко което трябва да направите е да вкарате този джаваскрипт файл в секцията на сайта ви.
    Авторт се е пострудил и ни е улеснил максимално.
    Ето малко по-различна форма на горният код:

    var json_data = "someVar = { 'kote': 'Miau', 'Ku4e': 'bau' }"; //Да приемем, че този текст сме го получили от сървъра чрез аякс заявка
    json_data.parseJSON(); //С тази функция спокойно можете да изпълнявате JSON стринг, без да се притеснявате от хакерски атаки.
    alert( someVar.dog ); //Ще извадо 'bau'

    Джаваскрипт файлът, който поставихте току-що в страниците си има фунцкията да превръща всеки масив, булева стойност, дата, число, обект и стринг в JSON стринг:

    var toJSON = someVar.toJSONString(); //Така променливата toJSON е готова да бъде изпратена към сървър, където той ще я обработи

    От страна на съвръра JSON стрингът е нищо повече от прост текст. Затова тя трябва да се обработи.
    При някои езици в самият компилатор се поддържа функцията за декодиране на JSON стринг, но ако при вас тези функции отсъстват, в http://json.org/ има скриптове на почти всички програмни езици, с които ще можете да обработите получената информация.

    Аз работя на последна версия на PHP (5.3.0) и там функциите json_encode И json_decode са вградени, но за тези, при които липсват, свалете си този архив, разархивирайте го, и навсякъдето искате да ползвате JSON функциите, include-вайте файла JSON.php.

    Някои допълнителни неща, които искам да кажа:
    За да не губи време браузъра да рендер-ва html код от данните, които му връщате при аякс заявката слагайте този ред:

    header('Content-Type: application/json');

    Друго важно нещо е, че при тези от вас, които имат вградени JSON функциите в PHP, ще трябва да добавяте гайла json_cyrillic_fix.php (от архива), който съдържа фикс ( намерен в PHP.net ) за проблема на json_encode и стринговете, които не са в UTF-8 формат.
    В архива има примери, как се ползват функциите.

    Ето линк към файловете.
    А сега е време за малко демо 🙂