2015-11-16 7 views
2

Я вижу разницу в том, что возвращается при сравнении свойств responseJSON responseSext и responseText моего запроса ajax.

На картинке ниже вы видите, что ссылка на responseJSON исключает свойство свойств. Когда я анализирую и использую responseText, свойство «properties» включено.

Я не встречал такого рода странности раньше, кто-нибудь есть какие-либо предложения или мысли о том, почему это происходит?

Редактировать 1: Объект свойств не определен при попытке получить к нему доступ непосредственно из responseJSON. Смотрите рисунок ниже:

Edit 2: Я не могу воспроизвести этот вопрос в моем jsFiddle (http://jsfiddle.net/madChemist/4hd9cz1g/). Я использую jQuery версии 2.1.4, которая помогает диагностировать вещи.

responseJSON эквивалентен разобранный responseText в моей скрипке:

Parsed responseText properties - {"border-color":"cyan","border-style":"dashed","border-width":"5px"} 
Unoutched responseJSON properties - {"border-color":"cyan","border-style":"dashed","border-width":"5px"} 

два различия, которые я вижу между моей средой и этот в первую очередь о том, что тип запроса Ajax является GET не POST. Данные в скрипке были обрезаны по сравнению с тем, что я загружаю в своей среде. Я протестировал обе обрезанные & без обрезки, которые не дали никаких различий в моих выводах.

Редактировать 3: Я сделал несколько скриншотов моего кода, чтобы продемонстрировать, что я пытаюсь сделать. Сначала я запустил скриншоты, которые я выполнил, пока у меня была точка останова во втором утверждении в модульном тестовом модуле.

+0

Я никогда не слышал о свойстве responseJSON ... о какой-либо идее/документации о том, что ее создает? не нашли его в обычных местах, которые я смотрю. –

+0

@KevinB взгляните на раздел «Типы данных» в [jQuery Documentation] (http://api.jquery.com/jquery.ajax/) –

+1

Если вы напрямую обращаетесь к этому объекту при использовании responseJSON, существует ли он? (исключает консольный обман) –

ответ

0

Мои тесты проходят в настоящее время. Моя проблема может быть связана с охватом QUnit. Странное поведение выше ушел, когда я сделал эти изменения в моем тесте:

QUnit.test("Method exportLayout", 2, function (assert) { 
    var done = assert.async(); 

    $('body').append('<div id="application" style="display:none;"></div>'); 
    var controller = new ApplicationController(); 
    controller.createApplicationWorkspace(); 

    var load = controller.loadLocalProject(); // Pulls in local JSON file 
    load.complete(function (request) { 
     var loaded = request.responseJSON; //$.parseJSON(request.responseText); 
     controller.setUpLayout($.parseJSON(request.responseText)); // Creates workspace from saved state 

     var result = controller.generateLayout(); // Generates Object. Data property should equal what was loaded in originally. 
     assert.ok(result !== undefined && result.data !== undefined, "Application controller generates layout response in a proper format."); 
     assert.deepEqual(loaded, result.data, "Freshly generated export is the same as initially loaded in import."); 

     // Teardown 
     setTimeout(function() { 
      controller.layout.destroy(); 
      $('#application').remove(); 
      done(); 
     }, 0); 

    }); 
}); 

Специально это изменение:

controller.setUpLayout($.parseJSON(request.responseText)); 

метод setUpLayout является несколько сотен строк долго, но это, как она начинается :

setUpLayout: function (loaded) { 
     if (typeof loaded !== 'object' || !loaded.hasOwnProperty('rows')) { 
      throw new Error('Invalid format for loaded paramater in setUpLayout method.'); 
     } 

     var initial_mode = TE.Application.reqres.request('editor:mode'); 
     TE.Application.vent.trigger('editor:toggle_mode', true); 

     var layout = $.extend({}, loaded); 
     var rowCollection = this.layout.editor.currentView.rows.currentView; 
     var rows = layout.rows; // Once stashed in a var, 

     ... 
     // Doesn't make use of `loaded` parameter. Only modifications are to `layout` variable. 

    } 

Я чувствую, что все еще может быть что-то еще на работе, но я хотел обновить этот пост с тем, что я только что нашел. Надеясь, что кто-то еще сможет заметить то, чего я не сделал.

Смежные вопросы