Загрузка jsTree отложенная загрузка не работает для моего URL-адреса ресурса, но для примера url

#jquery #json #jstree

#jquery #json #jstree

Вопрос:

Я загружаю данные в соответствии с примером, который я нашел, используя приведенный ниже код. Это позволяет мне указать URL-адрес и использовать URL-адрес образца https://www.jstree.com/fiddle/?lazy Я получаю рабочее дерево на своей странице. Этот URL возвращает json:

[{«id»: 1, «text»: «Корневой узел», «дочерние элементы»: [{«id»: 2, «text»: «Дочерний узел 1», «дочерние элементы»: true},{«id»: 3, «text»:»Дочерний узел2″}]}]

Я создал свой собственный URL-адрес, который возвращает точно такой же json. Моя проблема в том, что, используя мой URL, он доставляет один узел дерева с моей строкой json в качестве имени узла в соответствии с моим прикрепленным изображением. Насколько я вижу, оба URL-адреса возвращают одну и ту же строку json и представляют собой просто необработанный текст, но я не понимаю, почему он неправильно интерпретирует мой. Кто-нибудь может помочь мне понять, что я делаю неправильно?

     $(function() {
      $('#jstree').jstree({
        'core' : {
          'data' : {
            "url" : "/_content/data/table/companytree.aspx/?lazy",
            "data" : function (node) {
              return { "id" : node.id };
            }
          }
        }
      });
    });
 

извиняюсь, я добавил неправильный фрагмент кода

Первое изображение использует пример URL, а второе — мое..

рабочее дерево:

Дерево ошибок

Комментарии:

1. Я не знаю, помогает ли это, но когда я вызываю оба URL-адреса в своем браузере, URL-адрес jstree распознается как json, и браузер открывает плагин, который позволяет отображать raw / json. Однако с моим urll он этого не делает. Намек на то, что это не json или не распознает его как таковой, но обе строки идентичны и являются допустимыми json.

2. Итак, я запускаю оба URL-адреса в jsonparser.org загрузить URL-адрес, и, как и предполагалось, мой URL-адрес НЕ анализируется. Таким образом, несмотря на то, что обе строки json идентичны в результатах моего браузера, мне чего-то не хватает, чтобы идентифицировать строку как json..

Ответ №1:

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

 content-type: application/json; charset=utf-8
 

Вы также можете попробовать один раз, добавив ContentType, я точно не использовал эту структуру, но, как правило, это покажет, что возвращаемый тип — json, если его нет в заголовке.

 $(function() {
      $('#jstree').jstree({
        'core' : {
          'data' : {
            "url" : "/_content/data/table/companytree.aspx/?lazy",
            "contentType": "application/json; charset=utf-8",
            "data" : function (node) {
              return { "id" : node.id };
            }
          }
        }
      });
    });
 

Комментарии:

1. Привет 🙂 .. Так что я уже пробовал это сегодня утром, но безуспешно. Но сразу после того, как я включил щедрость, я попробовал что-то другое, и вместо того, чтобы возвращать JSON в виде текста на странице, чтобы дерево затем поглощало, я вернул json в ответ с моей страницы aspx. Конечно, это сработало. Потратил всего несколько недель, пытаясь заставить вышеуказанное работать так, как это делает демо. Единственное, что я пропустил, что вы добавили, это кодировку в вашем ContentType.. Я собираюсь посмотреть, имеет ли это какое-либо значение, и сообщу об этом.

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

3. нет проблем! рад, что вы смогли заставить это работать! Как правило, все, что нужно знать jstree, — это то, что ajax возвращает json, если тип содержимого находится в заголовке, который будет работать, каким бы способом вы это ни делали.

4. Я вижу ваш ответ, поэтому вы выбрали вариант 1, который я предложил. это здорово!

5. Привет, ваше предложение не сработало, хотя оно должно было сработать. Я уже попробовал ваше предложение, прежде чем отправлять дополнительную награду. Теперь я отправляю данные, используя тип содержимого, через http-ответ с моей страницы aspx, а не через вызов jquery для данных.

Ответ №2:

Я добавил этот код в свой aspx-код, который извлекает данные для отправки обратно на страницу.. Вместо публикации json на странице я возвращаю http-ответ.. Это работает для меня, но хотелось бы знать, почему демонстрационный подход не сработал. Тип содержимого кажется вероятным виновником, которого я не знаю.

         Response.ContentType = "application/json"
        Response.ContentEncoding = Encoding.UTF8

        Dim bom As Byte() = Encoding.UTF8.GetPreamble()
        Response.BinaryWrite(bom)
        Response.BinaryWrite(Encoding.UTF8.GetBytes(PageDataRecords))
        Response.Flush()
        Response.End()