Разбор ответа Ajax, когда он возвращает массив - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь разобрать ответ ajax на мой запрос, однако, похоже, что он возвращает массив вместо одной записи.

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

результаты

[
    {
        id: 1,
        company_id: 2,
        weightset_id: 1,
        name: 'A.2000',
        nominal: '2000.0',
        measured: '1999.9998',
        uncertainty: '0.002',
        precedence: 1,
        edited_by: null,
        created_by: 2,
        drift: 2,
        created_at: '2018-09-18T20:00:13.600Z',
        updated_at: '2018-09-18T20:42:31.804Z',
    },
];

javascript

<script type="text/javascript">

$(".repeatability_weight").on('change', function(){
     var input = $(this)
     var val = input.val()? input.val() : 0;

     var applied_weight = val

     window.alert(applied_weight);

       $.ajax({
        url: '<%= weightsets_weight_find_path %>', 
        type: 'GET',
        data: {'weight_id': applied_weight},

       success: function(response) 
            {
              var response = JSON.parse(response)
              var measured = response.measured
              console.log(response)
            }
      })   

  window.alert(measured)

  var res = $(".resolution").data("resolution")

  var measured = measured.toFixed(res)

  $(this).closest('tr').find('.repeatability_measured')[0].textContent = measured;


})

</script>

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Вы можете использовать $.getJSON, и он позаботится о синтаксическом анализе результата, вы должны ответить на формат json с помощью .json view

$(".repeatability_weight").on('change', function(){
  /* code code code */

  url = '<%= weightsets_weight_find_path %>';
  data = {weight_id: applied_weight}

  $.getJSON(url, data, function(data) {
    console.log(data) //this should print the array on the console
    var measured = data[0].measured //note the [0], you want the first element of the array to get the `measured` property
    console.log(measured)
  })

  /* the rest of your code */
})

, проверьте документы для получения более подробной информации https://api.jquery.com/jQuery.getJSON/

0 голосов
/ 25 октября 2018

Если сервер возвращается в строковом формате

'[{"id":1,"company_id":2,"weightset_id":1,"name":"A.2000","nominal":"2000.0","measured":"1999.9998","uncertainty":"0.002","precedence":1,"edited_by":null,"created_by":2,"drift":2,"created_at":"2018-09-18T20:00:13.600Z","updated_at":"2018-09-18T20:42:31.804Z"}]'

, используйте

var resp = JSON.parse(response);
var measured = resp[0].measured;

Если сервер возвращает массив напрямую

[{"id":1,"company_id":2,"weightset_id":1,"name":"A.2000","nominal":"2000.0","measured":"1999.9998","uncertainty":"0.002","precedence":1,"edited_by":null,"created_by":2,"drift":2,"created_at":"2018-09-18T20:00:13.600Z","updated_at":"2018-09-18T20:42:31.804Z"}]

, тогда доступнепосредственно, вам не нужно анализировать его снова.

var measured = response[0].measured;

edit: Как упоминалось в ADyson, сервер всегда возвращает строку.Это зависит от ваших потребностей, как вам нужно проанализировать данные.Если вы проанализировали данные в руках (например, как установить тип данных: json при использовании jquery), вы можете использовать его напрямую, иначе JSON.parse всегда там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...