2017-02-23 6 views
1

Я хочу подсчитать элементы массива, возвращенные json. Когда я использую response.length, он подсчитывает все символы в массиве (я так думаю), в то время как то, что я хочу, это подсчет количества элементов в массиве. Тот же метод работает на других страницах, только не с этим..length подсчитывает символы, а не длину массива

Это код PHP:

  ...$response[] = array("id" => $row['appid'], 
          "hour" => $row['hour'], 
          "tname" => $tname, 
          "tsurname" => $tsurname, 
          "cname" => $cname, 
          "csurname" => $csurname, 
          "cgsm" => $cgsm, 
          "cemail" => $cemail, 
          "cdept" => $cdept, 
          "cdeg" => $cdeg, 
          "purpose" => $purpose, 
          "clientnotshown" => $row['clientnotshown']); 


    }; 

    if(isset($response)){ 

    echo json_encode($response); 

    } else { 

    $response = array("val" => 0); 
    echo json_encode($response); 

    }; 

код Javascript:

function updateTable() { 

var getData = { 
         date: $("#displaydate").val(), 
         operation:"getData" 
        } 

        $.post("printoperations.php", getData).done(function(response) { 
         if (response.val != 0){ 

          alert("so far so good") 
          var arrayLength = response.length 
          alert(response) 
          alert(arrayLength)} 
}; 

Вот картина того, что я получаю. Я хочу, чтобы получить количество элементов, которые в данном случае 2.

+1

разобрать этот ответ на объект, а затем получить его. –

+1

Вы пытались разобрать JSON, чтобы получить реальный массив? Или укажите '' json'' в качестве типа данных при вызове '$ .post()', и jQuery проанализирует его для вас. – nnnnnn

+1

'JSON.parse (response)' или сообщить jQuery, что вы ожидаете ответа JSON. – Svenskunganka

ответ

3

Независимо от того, что вы отправляете с PHP, это всегда строка.
JQuery будет, однако, разобрать эту строку для вас автоматически, если вы либо отправить правильные заголовки, или сказать ему, что это JSON в настройках

$.post("printoperations.php", getData, function(response) { 
    if (response.val != 0) { 
     console.log("so far so good") 
     var arrayLength = response.length 
     console.log(response) 
     console.log(arrayLength) 
    } 
}, 'json'); // <- here 

и использовать консоль для отладки

2

Вам нужно разобрать ответ var response = JSON.parse(response), а затем response.length возвращает желаемый результат.

2
var getData = { 
        date: $("#displaydate").val(), 
        operation:"getData" 
       } 

       $.post("printoperations.php", getData).done(function(response) { 
        if (response.val != 0){ 

         alert("so far so good") 
         var responseArray = JSON.parse(response) 
         alert(responseArray) 
         alert(responseArray.length)} 
}; 
+0

@adeneo благодарит много. это была опечатка. исправил его –

1

Кажется, вы пытаются найти длину строки. Вместо этого попробуйте alert(typeof response), если он дает строку, то перед тем, как сделать что-нибудь, проанализируйте его на JSON с помощью JSON.parse(response), а затем попробуйте.

0

JSON.parse(response) Это сделало трюк. Спасибо за все ответы!

0

Вы должны поместить этот

header('Content-Type: application/json');

в серверной стороне PHP запроса.

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