json данные

Статус
В этой теме нельзя размещать новые ответы.

vanderv

Старатель
Регистрация
30 Май 2009
Сообщения
270
Реакции
12
Пытаюсь воссоздать один скрипт... Клиентскую часть скопировал, сейчас занимаюсь серверной.
По своей сути это uplode. Основа swf+ jquery
После загрузки, она принимает данные в формате json, в которой находится путь к залитому файлу.
вот маленький отрезок кода:
json = eval("(" + data.data + ")");
...
'<img src="' + json.path + '" alt=""/>'

Вопрос: я вообще не представляю как составить этот ответ. Что мне написать в php файле чтобы отравить такие данные?
 
Если через JQuery запрос идет в виде, например...
Код:
$.ajax({
  url: 'upload.php',
  success: function(data) 
  {
//run code or run other function
var img0 = '<img src="' + data.path0 + '" alt=""/>';
var img = '<img src="' + data.data.path + '" alt=""/>';
  },
  dataType:"json"
});
То вот тут upload.php должен вернуть ответ в виде JSON'а. Для этого надо собрать массивчик со всеми "ответами" и
PHP:
$result = array(
  'path0'=>'http://url/to/img0.jpg',
  'data' => array(
      'path' => 'http://url/to/img.jpg'),
      'other_data' => time()
     )
);
echo json_encode($result);
exit;

В общем для JSON'a скрипт должен вывести только echo json_encode($result); никаких лишних строк, тегов, пробелов
 
передаётся простой яваскрипт потому что проходит через eval, так что можно отдать яваскрипту объект (код в яваскрипте),
PHP:
echo 'data={"path": "path_to_file"};';
там через eval проходит data.data, а если в функцию отдаётся data тогда яваскрипт
Код:
json = eval(data);//тут полученный объект парсится и присваевается к json
alert(json.path);
или просто
PHP:
echo "path='path_to_file';path2='path_to_file2';";
Код:
eval(data);
alert(path);
alert(path2);
или когда куча всяких данных можно конвертировать php данные в формат json с функцией json_encode если php версия 5.2.0 и выше или использовать какие нибудь сторонние классы.
 
Спасибо за помощь. теперь когда стал отправлять данные, стала появляться ошибка underfine...
я заглянул в код swf. нашёл там функцию, которая отвечает за принятие от php данных и передаче их javascript.
Вот:
Код:
case DataEvent.UPLOAD_COMPLETE_DATA:
                {
                    _loc_4.type = "completeData";
                    _loc_4.data = param1.data.replace(/\\\"""\\/g, "\\\\");
                    _loc_4.file = this.fileData;
                    _loc_6 = JSON.decode(param1.data) as Object;
                    if (!_loc_6.success)
                    {
                        ExternalInterface.call("alert", _loc_6.message);
                    }
                    break;
                }
я понимаю это так:
_loc_6 присваивается все мои данные. тот самый path. Так же она проверяет на наличие success. Если не был передан, то идёт алерт ошибки... Вопрос: я отправлял ей этот success так же как и path (правда не факт что path приходит правильно=)), она всёравно лепит мне этот алерт... видимо неправильно отправляю.
Есть кто разбирается в этом?
 
да message не определён undefined, может добавить ещё в объект message и success
PHP:
echo 'data={"path": "path_to_file", "success": true, "message": "ok"};';
а вообще файл загружает?
 
это код обработчика на стороне клиента:
Код:
        up.bind('completeData', function(data){
            var $this = $('#image-' + data.file.id),
                $progress = $('.progress', $this),
                json = eval("(" + data.data + ")");
            $this.removeClass('imageBlockLoading').find('.imgCont').html(
                '<img src="' + json.path + '" alt=""/>' +
                '<span class="__objectId hidden">' + json.id + '</span>'
            );
            $this.attr('id', 'image-'+json.id);
            //$this.find('.deleteEditorLink').unbind().attr('href', 'javascript:ajaxPhotoDelete('+json.id+'); return false;');
            $progress.fadeOut();
            self.startUpload();
        });

вот swf код
Код:
                case DataEvent.UPLOAD_COMPLETE_DATA:
                {
                    _loc_4.type = "completeData";
                    _loc_4.data = param1.data.replace(/\\\"""\\/g, "\\\\");
                    _loc_4.file = this.fileData;
                    _loc_6 = JSON.decode(param1.data) as Object;
                    if (!_loc_6.success)
                    {
                        ExternalInterface.call("alert", _loc_6.message);
                    }
                    break;
                }

Закаченный файл она сохраняет, а вот найти _loc_6.success и _loc_6.message не может...
да вот часть скрипта обработчика:
if (@move_uploaded_file($_FILES[$upload_name]["tmp_name"], $save_path.$file_name)) {
echo '{"data":{"path":"http:\/\/url\/to\/img.jpg","success":"true","message":"ok"}}';
exit;
}
 
_loc_6 это весь json объект JSON.decode(param1.data) и если success=true тогда проходит, но не ясно что за param1.
По кускам кода трудно определить какие данные передаются, лучше весь загрузчик выложить flash, javascript, php файлы тогда можно было бы локально потестировать.
Или ещё вариант заменить загрузчик другим с открытым кодом и примерами, например swfupload который использует wordpress
 
Всё, ответ найден:
PHP:
	$result = array(
		  'path' => "/uploads/".$name_min,
		  'success' => true,
		  'message' => 'message',
		 );

	echo json_encode($result);
Думаю здесь всё понятно. Всем спасибо=)
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху