Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Замена json2 -на json jQuery Form Plugin


Автор: densite 30.9.2011, 08:10
Можно ли отказатся от использования json2.js https://github.com/douglascrockford/JSON-js,и использовать сериализацию с помощью jQuery Form Plugin?
сейчас работает так:
JQuery UI редварительно готовит данные resizable,droppable и тд.Далее ,как видно по окончанию js скрипта ,все данные сериализуются в Json с помошью js скрипта json2.js  и передаются на сервер
Код

***окончание****
$('#submit').bind('click',function(){
                    var dataString  = JSON.stringify(data);
                    $('#jsondata').val(dataString);
          $('#jsonform').submit();
                });


Как заменить вышеизложенный код ,на отправку json данных ,из jQuery Form Plugin?
Код
$(document).ready(function() { 
        $('#jsonForm').ajaxForm({ 
                dataType:  'json', 
                 success:   processJson 
    }); 
});

    

Автор: Stolzen 30.9.2011, 12:09
JSON.stringify(data) нужен для передачи сложных данных. Если этого не нужно, то можно использовать jQuery.param(data)


Автор: densite 30.9.2011, 12:32
Ничего я не понял.Не изменяя ни строки кода,просто исключив файл json2.js ,по факту в трех браузерах все так и осталось ,работает.Причем нормально (с моей точки зрения), по ajax передаются данные на сервер ,php отрабатывает нормально.
Код
jsondata=%7B%22images%22%3A%5B%7B%22id%22%3A%22obj_0%22%2C%22src%22%3A%22gfx%2Fbackground.jpg%22%2C%22width%22%3A%22640%22%2C%22height%22%3A%22480%22%7D%5D%7D


На сервере php разбор
Код
/*определяем наличие переменной $_POST['jsondata']при помощи метода inRequest() объекта ядра cms.
 Этот метод возращает true/false, в зависимости от наличия переменной*/
$is_jsondata = $inCore->inRequest('jsondata');
//Если отправлены 
 if ($is_jsondata){ 
 /*получаем входящие переменные сериализованные Json - при помощи метода request(). */
$res = json_decode(stripslashes($inCore->request('jsondata', 'str')), true);
/* get data */

/*код обработки*/

exit ();
}

Зачем тогда   применять API formSerialize  jQuery Form Plugin?
Код

var queryString = $('#myFormId').formSerialize(); 
 
// the data could now be submitted using $.get, $.post, $.ajax, etc 
$.post('myscript.php', queryString);


Так и остается для меня загадкой,зачем нужен json2.js ?


Автор: Stolzen 30.9.2011, 12:34
Цитата(densite @  30.9.2011,  13:32 Найти цитируемый пост)
Так и остается для меня загадкой,зачем нужен json2.js ?

Для поддержки ie7 например

Автор: densite 30.9.2011, 12:40
Цитата(Stolzen @  30.9.2011,  12:09 Найти цитируемый пост)
JSON.stringify(data) нужен 

Тогда нужен.В массив данных входит путь к изображению,имя  изображения,имя обьекта,размер изображения,угол поворота,и все это для 1 или олновременно для 5-10 изображений.

Добавлено @ 12:42
Цитата(Stolzen @  30.9.2011,  12:34 Найти цитируемый пост)
Для поддержки ie7 например

Понятно.Спасибо.А в более позних версиях ie ?
Да... в 86 на асемблере проще было 512 команд и все дела.
Учусь,учусь.Я не знал что Метод JSON.stringify сдесь настолько важен.

Автор: Stolzen 30.9.2011, 12:57
Под сложным объектом я подразумевал объект с подобъектами, списками и т.п. Если этого нет - то вполне можно обойтись просто сериализацией через jQuery.param(data)

Автор: densite 30.9.2011, 13:14
Попробовал var dataString  = jQuery.param(data)
Получил 

Код
jsondata=images%255B0%255D%255Bid%255D%3Dobj_0%26images%255B0%255D%255Bsrc%255D%3Dgfx%252Fbackground.jpg%26images%255B0%255D%255Bwidth


Вместо
Код
jsondata=%7B%22images%22%3A%5B%7B%22id%22%3A%22obj_0%22%2C%22src%22%3A%22gfx%2Fbackground.jpg%22%2C%22width


Страницы то  кодировке win 1251.
Ну собственно ,это уже решать не надо.
Мне главное , суть истины.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)