2015-10-17 33 views
1

我有我自己的API用PHP编写。基本上我有一个下拉式的输入关键字来调用我的api。 输入关键字be = test。因此,使用关键字参数的GET请求对api/search /进行ajax调用。不能回调,来自api的json数据

api搜索功能。

public function search() { 
    if($this->get_request() != "GET") { 
     $this->response("Wrong Request"); 
    } 
    $keyword = $this->request['keyword']; 
    if(!empty($keyword)) { 
     $query = "SELECT id,name FROM salon WHERE name LIKE '$keyword% %' 
        UNION 
        SELECT id,name FROM salon WHERE name LIKE '% $keyword%' 
        UNION 
        SELECT id,name FROM salon WHERE name LIKE '$keyword%' 
        UNION 
        SELECT id,subcat FROM service WHERE subcat LIKE '$keyword% %' 
        UNION 
        SELECT id,subcat FROM service WHERE subcat LIKE '% $keyword%' 
        UNION 
        SELECT id,subcat FROM service WHERE subcat LIKE '$keyword%' 
        UNION 
        SELECT staff_id,staff_name FROM staff WHERE staff_name LIKE '$keyword% %' 
        UNION 
        SELECT staff_id,staff_name FROM staff WHERE staff_name LIKE '% $keyword%' 
        UNION 
        SELECT staff_id,staff_name FROM staff WHERE staff_name LIKE '$keyword%'"; 
     $result = mysql_query($query); 
     $sum_result = array(); 
     if(mysql_num_rows($result) > 0) { 
      while($row = mysql_fetch_assoc($result)) { 
       $sum_result[] = $row; 
      } 
      $this->response(json_encode($sum_result)); 
     } else { 
      $this->response("No Content Found"); 
     } 
    } else { 
     $this->response("Keyword Empty"); 
    } 
} 

API响应越来越右 - 让例如关键字=测试.. 响应是=

[{"id":"354118C3-EA70-454D-AE19-46DBD7E3B5D6","name":"test multi"},{"id":"955B6DF0-0666-40A1-8906-23B4348F449B","name":"test ses"},{"id":"A7598E0C-D80B-4F72-9E6C-9DD5620F68D3","name":"Test 3"},{"id":"C33AC5F0-21A2-484E-8A29-DC6D183EB067","name":"Test 1"},{"id":"EC52F80A-C9CE-4642-963F-0BE7D96F5E36","name":"Test 2"},{"id":"F2333012-EE1A-42DA-A892-F9D7F986E287","name":"Test 4"}] 

我的JQuery:

$('.salon-service').autocompleteInput(function(text,callback) { 
if (!text) { 
    callback(['January','February','March','April','May','June','July','August','September','October','November','December']); 
} else { 
    $.ajax({ 
     url: 'api/search/', 
     type: 'GET', 
     dataType: 'json', 
     asyn: false, 
     data: { keyword: text }, 
     complete: function(data) { 
      var convert = Object.keys(data).map(function(k) { 
       callback([data[k]]); 
      }); 


     } 
    }); 

} 

});

我想在jquery的回调中获得api响应。

+0

我只为通过回调响应得到确定。 –

+0

hae你试过使用成功而不是完整的吗? – madforstrength

+0

让我们继续并获得标准[mysql_ *函数已被弃用,切换到PDO或mysqli_](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)一路走来。 (我会与PDO一起阅读至少在该链接的前2个答案,非常非常有帮助。)另外,[请注意SQL注入](http://stackoverflow.com/questions/60174/how-cani-i-预防-SQL注入在PHP) – Terminus

回答

1

返回data不是对象的字符串。您需要先分析它:

使用本:

data = JSON.parse(data); 

,或者你可以使用jQuery来解析JSON,以及:

$.parseJSON(data); 

而且使用success代替complete

0

问题解决: 我用成功取代完整。由于@madforstrength

,并添加$。每个

success: function(data) { 
      var res = new Array(); 
      var counter = 0; 
      $.each(data, function(index, element) { 
       //callback([element.name]); 
       res[counter] = element.name; 
       counter++; 
      }); 
      callback([res]); 
     }