json данные

Тема в разделе "PHP", создана пользователем vanderv, 9 сен 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. vanderv

    vanderv

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

    Вопрос: я вообще не представляю как составить этот ответ. Что мне написать в php файле чтобы отравить такие данные?
     
  2. jo0o00nyy

    jo0o00nyy Постоялец

    Регистр.:
    12 май 2010
    Сообщения:
    65
    Симпатии:
    27
    Если через 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); никаких лишних строк, тегов, пробелов
     
    vanderv нравится это.
  3. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    передаётся простой яваскрипт потому что проходит через 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 и выше или использовать какие нибудь сторонние классы.
     
    vanderv нравится это.
  4. vanderv

    vanderv

    Регистр.:
    30 май 2009
    Сообщения:
    270
    Симпатии:
    12
    Спасибо за помощь. теперь когда стал отправлять данные, стала появляться ошибка 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 приходит правильно=)), она всёравно лепит мне этот алерт... видимо неправильно отправляю.
    Есть кто разбирается в этом?
     
  5. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    да message не определён undefined, может добавить ещё в объект message и success
    PHP:
    echo 'data={"path": "path_to_file", "success": true, "message": "ok"};';
    а вообще файл загружает?
     
  6. vanderv

    vanderv

    Регистр.:
    30 май 2009
    Сообщения:
    270
    Симпатии:
    12
    это код обработчика на стороне клиента:
    Код:
            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;
    }
     
  7. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    _loc_6 это весь json объект JSON.decode(param1.data) и если success=true тогда проходит, но не ясно что за param1.
    По кускам кода трудно определить какие данные передаются, лучше весь загрузчик выложить flash, javascript, php файлы тогда можно было бы локально потестировать.
    Или ещё вариант заменить загрузчик другим с открытым кодом и примерами, например swfupload который использует wordpress

    http://www.swfupload.org/
     
  8. vanderv

    vanderv

    Регистр.:
    30 май 2009
    Сообщения:
    270
    Симпатии:
    12
    Всё, ответ найден:
    PHP:
        $result = array(
              
    'path' => "/uploads/".$name_min,
              
    'success' => true,
              
    'message' => 'message',
             );

        echo 
    json_encode($result);  
    Думаю здесь всё понятно. Всем спасибо=)
     
Статус темы:
Закрыта.