Я собираюсь ответить на этот вопрос в надежде, что он кому-нибудь поможет.
Я потратил в общей сложности 5 часов, пытаясь понять, что происходит, и наконец добавил хак.
ИспользованиеFirebug, я заметил, что к URL добавляется обратный вызов.Когда данные были возвращены, обратный вызов не выполнялся.Я не указывал никаких обратных вызовов, так что это был первый элемент, который нужно рассмотреть.
В документации оказывается, что jquery1.5 и далее автоматически добавит обратный вызов, если будет считать, что тип данных - jsonp.Однако я явно упомянул json как тип данных, поэтому не понимаю, почему он добавил этот обратный вызов.
Вот что говорит документация jquery: «jsonp»: загрузка в блок JSON с использованием JSONP.Добавит дополнительный "? Callback =?"в конце вашего URL, чтобы указать обратный вызов.
Так что это заставило меня задуматься о том, что происходит.Также оказалось, что начиная с jquery 1.5, теперь вы можете указать несколько типов данных в вызове AJAX, и jquery автоматически попытается преобразовать.
Глубоко в документации jquery есть следующее:может преобразовать dataType из того, что он получил в заголовке Content-Type, в то, что вам нужно. "
Поэтому я просто подумал, что было бы лучше вернуть тип данных в виде текста, а затем использовать jquery для преобразования его в json,В тот момент, когда я изменил свой dataType на «text json» вместо просто «json», все волшебным образом начало работать.
Я предполагаю, что с новым jquery что-то не так с автоматическим выводом типов данных.У меня строгий срок, поэтому я больше не могу исследовать эту проблему, но если кто-то найдет ответы, пожалуйста, отправьте сообщение.
Вот мой модифицированный Javascript:
setupTree: function (treeDivId) {
$('#' + treeDivId).jstree({
"json_data": {
"ajax": {
"url" : CustomTree.SectorLoadUrl,
"type" : "POST",
"dataType" : "text json",
"contentType" : "application/json charset=utf-8",
}
},
"themes": {
"theme": "default",
"dots": true,
"icons": false
},
"plugins": ["themes", "json_data"]
});