данные ajax [0] не определены - PullRequest
       11

данные ajax [0] не определены

0 голосов
/ 08 февраля 2019

Я использую ajax, чтобы получить количество строк (COUNT (*)) из SQL-запроса в php.

Возвращение JSON на вкладке Firefox-Network:

[{"число ": 2}],

(2 без кавычек).

Но в" успехе ajax ", когда я пытаюсь получить значение (2) из ​​данных [0] [«number»] или data.length, возвращает «undefined».

Работает, только если я анализирую JSON как объект.

   $.ajax({
        url: 'queries.php?q=count',
        type: 'post',
        //data: data,
        datatype: 'json',
        success: function(data) { 

        //var dataobject = jQuery.parseJSON(data);
        //console.log(dataobject);
        //var var2 = dataobject[0].number; ---->THIS WORKS!
        //alert(JSON.parse(data).length); ---->THIS WORKS!

        //console.log(data.length); ---->Undefined 

        console.log(typeof data); ---->string
        console.log(data[0]["number"]);---->Undefined,i want this to work!!! 

      }
});

Thw SQL, который я использую в php:

      switch ($_GET["q"]) {

      case "count":
      $sql = "SELECT count(*) as number from 
            (SELECT Employees.emp_username, .............
                    where Employees.emp_username = ? and Year(emp)=2016  and    Month(emp)= MONTH(getdate()) ) as rows1 ";

      $stmt = sqlsrv_prepare( $conn, $sql , array(&$_SESSION["username"] ));
      break;

      default: header("Location: index.php"); }


      if( !$stmt ) { die( print_r( sqlsrv_errors(), true)); }
      sqlsrv_execute($stmt);
      $rows = array();

      if(sqlsrv_execute($stmt)){
      while($row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)){

      $rows[] = $row;  }

     } else{
             die( print_r( sqlsrv_errors(), true));
   } 

     print json_encode($rows);

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Сначала необходимо проанализировать данные, как вы сделали с jQuery.parseJSON(data) или как в предупреждении JSON.parse(data).

data - это строковый объект, поэтому при доступе к элементу [0]Вы получаете первый символ строки.В вашем примере: [.Это первый элемент строки [{"number":2}].

Я предлагаю применить [0] ['number'] к dataobject, поэтому ваш код должен выглядеть следующим образом:

$.ajax({
    url: 'queries.php?q=count',
    type: 'post',
    //data: data,
    datatype: 'json',
    success: function(data) { 

    var dataobject = jQuery.parseJSON(data);

    console.log(dataobject[0]["number"]);
}
0 голосов
/ 08 февраля 2019

Тип вашей переменной - строка.Вы должны сначала разобрать его.

$.ajax({
        url: 'queries.php?q=count',
        type: 'post',
        //data: data,
        datatype: 'json',
        success: function(data) { 

        //var dataobject = jQuery.parseJSON(data);
        //console.log(dataobject);
        //var var2 = dataobject[0].number; ---->THIS WORKS!
        //alert(JSON.parse(data).length); ---->THIS WORKS!

        //console.log(data.length); ---->Undefined 

        console.log(typeof data); ---->string
data = JSON.parse(data);
        console.log(data[0]["number"]);---->Undefined,i want this to work!!! 

      }
});
...