У меня есть этот PHP-код, который возвращает JSON

public function my_account(){
             header("Access-Control-Allow-Origin: *");
           header("Access-Control-Allow-Methods: PUT, GET, POST");
           header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");
           $email_posted = $this->input->post('email');
           $email = preg_replace('/\s+/', '', $email_posted);

            $where = "email='$email'";

            $this->db->where($where);


            $query = $this->db->get('users');

            if ($query->num_rows() > 0)
            {
               foreach ($query->result() as $row)
               {
                  $json = array("id"=>$row->id, "email"=>$row->email,"names"=>$row->names,"country"=>$row->country,"password"=>$row->password,"telephone"=>$row->telephone);
                  echo json_encode($json);
               }
            }

         }

JSON вернулся в этом формате

{"id":"15","email":"corn64@gmail.com","names":"Cern 64","country":"","password":"cern!768","telephone":"00000"}

Чтобы получить данные в JQuery

$.each(data, function(i, obj) {
        alert(obj.email);
});

И имеет эту скрипку https://jsfiddle.net/c5b4o6yh/2/

Я получаю ошибку

Uncaught TypeError: Cannot use 'in' operator to search for 'length' in

{"id": "15", "email": "corn64@gmail.com", "names": "Cern 64", "country": "", "password": "cern! 768", "phone" : " 00000 " }

Как правильно получить значение, используя известные ключи?

3
user7851085 4 Сен 2017 в 10:08

4 ответа

Лучший ответ

Это наверняка проблема: -

1.Вы перезаписываете свою $json переменную внутри foreach()

2.Вы отправляете только один ответ внутри foreach().

Измените код, как показано ниже (изменения комментируются): -

public function my_account(){
    header("Access-Control-Allow-Origin: *");
    header("Access-Control-Allow-Methods: PUT, GET, POST");
    header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");
    $email_posted = $this->input->post('email');
    $email = preg_replace('/\s+/', '', $email_posted);

    $where = "email='$email'";

    $this->db->where($where);


    $query = $this->db->get('users');
    $json = array(); //define variable as an array variable
    if ($query->num_rows() > 0)
    {
       foreach ($query->result() as $row)
       {
          $json []= array("id"=>$row->id, "email"=>$row->email,"names"=>$row->names,"country"=>$row->country,"password"=>$row->password,"telephone"=>$row->telephone);//assign values to array

       }
    }
    echo json_encode($json); // send response after loop completion
 }

Теперь ваш оригинальный код скрипта будет работать.

1
Anant Singh---Alive to Die 4 Сен 2017 в 07:34

Сначала вы сохраняете значения в массиве ((с помощью функции array_push () вы можете вставить один или несколько элементов в конец массива))

public function my_account(){
    header("Access-Control-Allow-Origin: *");
    header("Access-Control-Allow-Methods: PUT, GET, POST");
    header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");
    $email_posted = $this->input->post('email');
    $email = preg_replace('/\s+/', '', $email_posted);

    $where = "email='$email'";

    $this->db->where($where);


    $query = $this->db->get('users');
    $json = array();
    if ($query->num_rows() > 0)
    {
       foreach ($query->result() as $row)
       {
        array_push($json,array("id"=>$row->id, "email"=>$row->email,"names"=>$row->names,"country"=>$row->country,"password"=>$row->password,"telephone"=>$row->telephone));

          echo json_encode($json);
       }
    }

}
1
pedram shabani 4 Сен 2017 в 07:37

В этом случае ваш ответ должен быть массивом, а не простым объектом. Итак, попробуйте переделать ваш код, чтобы вернуть

[{"id":"15","email":"corn64@gmail.com","names":"Cern 64","country":"","password":"cern!768","telephone":"00000"}]

Это jsfiddle правильно.

0
slesh 4 Сен 2017 в 07:22

Используйте JSON.parse(data) для преобразования строки JSON из вашей конечной точки в объект JS, а затем получите значения отдельных ключей:

var obj = JSON.parse(data);
var id = obj.id;
0
William 4 Сен 2017 в 07:32