2017-06-19 3 views
0

Also, wenn ich versuche, ein Array von Datenbank-Objekt zu meinem AJAX und parse es, wird es in einem Array von Zeichen. Ich meine, mein json_encode Ergebnis ist [{'id':38, 'first_name':jana}] und wenn ich versuche, es zu Array in der Ajax zu analysieren, was geschehen ist, und Array von Zeichen - ['[', '{', '''] usw. Das ist mein Ajax:PHP Rückgabe Array von Datenbank-Objekt zu AJAX Yii2

function searchInput() { 
    var $content = $('.jobboard-quick-search-form').serialize(); 
    $.ajax({ 
     url : '/admin/site/search', 
     method : "GET", 
     data : $content, 
     success : function (data) { 
      var arr = JSON.parse(data); 
      console.log(arr); 
     } 
    }); 
} 

und meine Aktion:

public function actionSearch() 
    { 
     $lang = \frontend\models\Lang::getCurrent(); 
     $pageSize = 100; 

     if(\Yii::$app->request->isAjax) 
     { 
      $search = \Yii::$app->request->get('search-label'); 
      $town = \Yii::$app->request->get('towns-list'); 

      $startsWith = '%'.$search; 
      $between = '%'.$search.'%'; 
      $endsWith = $search.'%'; 

      $joinDoctors = "SELECT `doctor`.`id`, `doctorLang`.`first_name`, `doctorLang`.`second_name`, `doctorLang`.`city`, `doctorLang`.`hospital_name` 
          FROM `doctor` LEFT JOIN `doctorLang` ON `doctor`.`id`=`doctorLang`.`doc_id` 
          WHERE `doctorLang`.`city`='$town' 
          AND `doctorLang`.`language`='$lang->url' 
          AND `doctor`.`active`=1 
          AND (`doctorLang`.`first_name` LIKE '$startsWith' 
          OR `doctorLang`.`first_name` LIKE '$between' 
          OR `doctorLang`.`first_name` LIKE '$endsWith' 
          OR `doctorLang`.`second_name` LIKE '$startsWith' 
          OR `doctorLang`.`second_name` LIKE '$between' 
          OR `doctorLang`.`second_name` LIKE '$endsWith' 
          OR `doctorLang`.`third_name` LIKE '$startsWith' 
          OR `doctorLang`.`third_name` LIKE '$between' 
          OR `doctorLang`.`third_name` LIKE '$endsWith')"; 

      $doctor = \Yii::$app->db->createCommand($joinDoctors)->queryAll(); 


      $joinHospitals = "SELECT `hospital`.`id`, `hospitalLang`.`title`, `hospitalLang`.`address`, `hospitalLang`.`description` 
          FROM `hospital` LEFT JOIN `hospitalLang` ON `hospital`.`id`=`hospitalLang`.`hospital_id` 
          WHERE `hospitalLang`.`city`='$town' 
          AND `hospitalLang`.`language`='$lang->url' 
          AND `hospital`.`active`=1 
          AND (`hospitalLang`.`title` LIKE '$startsWith' 
          OR `hospitalLang`.`title` LIKE '$between' 
          OR `hospitalLang`.`title` LIKE '$endsWith')"; 


      return json_encode($doctor); 

     } 

    } 

Vielen Dank im Voraus!

+0

Sie den Wert, den Sie als Nummer – scaisEdge

+0

Zunächst müssen werfen sollte - Code für SQL-Injection geöffnet ist, Verwenden Sie [Yii 2 Query Builder] (http://www.yiiframework.com/doc-2.0/guide-db-query-builder.html). Zweitens - haben Sie versucht, 'JSON.parse (data);' zu entfernen und 'data' direkt auszugeben? Es ist sehr wahrscheinlich, dass JSON bereits analysiert wurde. – Bizley

+0

Ja ich habe aber nichts. –

Antwort

0

allererst in Ajax hinzufügen:

dataType: 'json' 


$.ajax({ 
      url:<code>, 
      type: <code>, 
      dataType: 'json', 
      data:<code> 
     }) 

Nächster Versuch Verwendung restController

class DataController extends yii\rest\Controller 
{ 
    public function actionSearch() 
    { 
     [.....] 
     return \Yii::$app->db->createCommand($joinDoctors)->queryAll(); 
    } 
}