Данные JSON возвращают неверную метку - PullRequest
4 голосов
/ 09 сентября 2010

Я использую Ajax-файл для загрузки с его библиотекой javascript / jQuery .

При загрузке файла я получаю сообщение об ошибке: SyntaxError: invalid label

Это мой JS-скрипт:

  jQuery('.uploadImage').live('click',function() {
      ajaxFileUpload();
  });

 (...)

  function ajaxFileUpload(){
    jQuery.ajaxFileUpload({
            url:'../wp-content/plugins/wp-filebrowser/uploader.php', 
            secureuri:false,
            fileElementId:'uploadFile',
            dataType: 'json',
            success: function (data, status){
                if(typeof(data.error) != 'undefined'){
                    if(data.error != ''){
                        alert(data.error);
                    }else{
                        alert(data.msg);
                    }
                }
            },
            error: function (data, status, e){
                alert(data + ' - ' + status + ' - ' + e);
            }
        }
    )
    return false;   
  }

Мой PHP-скрипт работает (проверено перед использованием json / jquery), но, должно быть, что-то не так с моим выводом json из моего PHP-файла.Я попробовал два подхода.

Я использую json_encode для форматирования вывода.Вот часть моего PHP-кода:

    (...)
    // Error message is at this stage empty.
    move_uploaded_file($_FILES["file"]["tmp_name"], $uploadfile);
    $respons = $_FILES["file"]["name"]._e(' successfully uploaded');

    $data = array( "error"=> $error, "msg"=> $respons );
    echo json_encode($data);  

ОБНОВЛЕНИЕ
Оказывается, я использовал Worpdress _e() для поддержки мультиязычности.Проблема в том, что _e() отображает содержимое и загромождает ответ JSON.Как только я переключился на __(), это сработало.

Спасибо за помощь в отладке этой проблемы, ребята.

Ответы [ 2 ]

2 голосов
/ 09 сентября 2010

Первый подход не дает действительный JSON. Посмотрите на вывод json_encode() -функции, которая генерирует его правильно. Основная проблема заключается в том, что ключи и значения не заключены в двойные кавычки.

Вы пытались использовать firebug, чтобы определить точный источник ошибки? Каждый JSON-ключ должен быть строкой. Это явно не тот случай в вашей ошибочной линии.

0 голосов
/ 09 сентября 2010

метки json должны быть заключены в кавычки:

"'error':" . $error . "'\n";

и так далее.Кроме того, если $error содержит какие-либо кавычки / двоеточия, это также "нарушит" синтаксис.По сути, вы широко открыты для JSON-эквивалента внедрения SQL-кода с тем, что вы делаете.Лучше не создавать строки JSON самостоятельно, а просто использовать json_encode() для обычных массивов / объектов PHP.Если вы как-то сохраните выходные данные обеих версий (error_log()?), Вы можете пропустить их через http://jsonlint.com/, чтобы увидеть, что с ними не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...