2015-05-02 2 views
0

У меня есть следующий текст, возвращенный в xmlhttpresponse, и мне нужно разобрать его разделителем каналов. Он должен возвращать массив, где позиция 0 является блоком 1, позиция 1 - это данные nodename json, позиция 2 - данные пользователя.Javascript parse response text from xmlhttpresponse

({"body": "Block1|[{\"nodeName\":\"DIV\",\"nodeIndex\":20,\"x_offset\":131,\"y_offset\":47}]|33|7|33|[{\"UserID\":\"d8b4e408-b013-417c08aaa-7cd3658f4160_05_01_2015_21_32_46_000\",\"os\":\"Windows\",\"browser_width\":1366,\"Count\":16}}]"}) 

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

function outputResult() { 
     var response = invocation.responseText; 
     var textDiv = document.getElementById("textDiv"); 
     textDiv.innerHTML += response; 

     var arr = response.body.split("|"); 
     console.log(arr[0]) 
    } 
+0

Не можете описать более подробно то, что вы пытаетесь выполнить в своей функции? Это действительно не имеет большого значения для меня. Почему вы назначаете текст div и затем разделяете его потом? Каков источник данных и почему он вставляет эти каналы в данные? – Roberto

+0

Я экономлю круглые поездки на сервер ... получаю все, что мне нужно, и возвращаюсь к клиенту, данные Block1 могут содержать 10 тыс. Элементов, поэтому один снимок сохраняет время пользователя. – Rob

ответ

1

Вам необходимо разобрать данные JSON после разделения строки на '|' характер, как код в для цикла:

<!DOCTYPE html> 
<html> 
<head> 
</head> 
<body> 
    <h1>result</h1> 
    <div id="textDiv"></div> 
    <script> 
     function outputResult() { 
      var response = ({"body": "Block1|[{\"nodeName\":\"DIV\",\"nodeIndex\":20,\"x_offset\":131,\"y_offset\":47}]|33|7|33|[{\"UserID\":\"d8b4e408-b013-417c08aaa-7cd3658f4160_05_01_2015_21_32_46_000\",\"os\":\"Windows\",\"browser_width\":1366,\"Count\":16}]"}); 
      var textDiv = document.getElementById("textDiv"); 
      textDiv.innerHTML += response; 

      var arr = response.body.split("|"); 
      for(var i in arr){ 
       if(arr[i].indexOf('[') === 0) 
       arr[i] = JSON.parse(arr[i]); 
      } 
      console.log(arr); 
     } 
     outputResult(); 
    </script> 
</body> 
</html> 

Однако textDiv.innerHTML + = ответ; не будет отображать текст ответа, как вы можете ожидать. Вместо этого он будет отображаться как [object Object], поэтому вам нужно вручную установить формат для отображения.

+0

Не думайте, что это будет работать, поскольку входящие данные являются строкой, а не в формате, который может быть легко преобразован в объект. Его нужно будет очистить первым, прежде чем применять JSON.parse() или eval() к частям. Лучшим решением, по возможности, было бы изменение источника данных для вывода данных в более удобной форме. – Roberto

+0

@coderLMN Я получаю undefined в разделе ... ваше предложение - это то, что обычно работает, если я использую jquery, но нуждаюсь в нем в javascript. – Rob

+0

@Rob Я обновил свой ответ, поставив весь HTML-файл. Я протестировал его в браузере Chrome. Вы можете скопировать и сохранить его в файл .html, открыть файл в браузере и посмотреть результат на выходе консоли. Это чистый javascript и не имеет ничего общего с jQuery или любой другой библиотекой. – coderLMN