Невозможно прочитать JSON с помощью X-Editable/jQuery, Chrome

Я слишком долго пытался понять, почему это не работает. Пора просить о помощи.

У меня есть Javascript, который использует X-Editable. Моя страница отправляет запрос AJAX на мой сервер. Мой сервер отвечает JSON, содержащим ключ db. Единственная проблема в том, что Chrome не распознает JSON.

Инструменты разработки показывают ответ как:

HTTP/1.1 200 OK
Date: Wed, 22 Oct 2014 20:04:12 GMT
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Content-Type: text/javascript;charset=UTF-8
Content-Length: 30
Server: Jetty(7.6.13.v20130916)

{"success":true,"actionid":66}

Я не думаю, что успех в этом является спецификацией, но X-Editable ссылается на это. Я пробовал вводить и выводить, разницы никакой.

Приведенная ниже функция обрабатывает отправку запроса AJAX и обрабатывает успех/неудачу. Только процедура успеха по какой-то причине не вызывается.

$('#save-btn').click(function() {
    $('.new-link-param').editable('submit', {
        url: '/newlink',
        ajaxOptions: {
            type: 'post'
        },
        success: function (data, config) {
            // console.log(JSON.stringify(data));
            // console.log(data.actionid);
            // console.log(typeof data);
            // if(data && data.actionid){ // assumes response like {"actionid": 2}
            //     alert(true);
            //     $(this).editable('option', 'actionid', data.actionid);
            //     $(this).removeClass('editable-unsaved');
            //     var msg = "Link saved.";
            //     $('#msg').addClass('alert-success').remove.Class('hidden').removeClass('alert-error').html(msg).show();
            //     $(this).off('save.newuser');
            // }
            // else if(data && data.errors){
            //     config.error.call(this, data.errors);
            //}
            alert(true);
        },
        error: function(errors) {
            alert(false);
            var msg = "";
            if(errors && errors.responseText){
                msg = errors.responseText;
            } else {
            console.log("Error: " + errors.responseText);
            }
}}).editable('destroy').removeClass().removeAttr('id').parent().parent().children("button").remove();
});
}

Ранее в тот же день функция успеха была вызвана, но внутренний оператор if возвращал false, хотя данные существовали. По какой-то причине data.actionid не был определен. Не уверен, почему это изменилось. Я бы подумал, учитывая ответ, который я вставил выше, что он должен быть поражен.

Мне интересно, что мне нужно сделать, чтобы код JS зарегистрировался успешно и распознал возвращенный ему JSON.


person Chris    schedule 22.10.2014    source источник


Ответы (1)


Решение состоит в том, что мне нужно было указать ajaxOptions{ dataType: 'json'}.

person Chris    schedule 22.10.2014