2011-04-03 104 views
0

我有一個<input>,當有人輸入時顯示建議。我正在構建後端,以便ajax抓取數據庫中前五個具有該字母序列的標記,並以跨度顯示它,特別是<div>。我似乎並沒有完全成功。這是我做過的第一個Ajax。幫助將不勝感激。以下是適用的HTML,Javascript和PHP。我認爲我很接近,但不確定如何繼續。該問題可能是在JavaScript中。在php和jQuery中使用ajax時,如何循環瀏覽json?

HTML:

<label id="testTagsLabel">Tags:</label> 
<input type="text" name="tags" id="testTags" placeholder="Ex: Poem, Edgar Allen Poe"> 
<div id="tagSuggest"> 
<ul> 
<!--the javascript would add the suggests as list items here--> 
</ul> 
</div> 

PHP:

<?php #create_set.ajax.php 

$tagSuggestions = array(); 

$currentTag = $_POST['sendTag']; 

if (!empty($currentTag)){ 

require_once (MYSQL); //gets the database connection 

$enteredTag = mysqli_real_escape_string ($dbc, $currentTag); 

$q = "SELECT name FROM tags WHERE MATCH(name) AGAINST('$enteredTag'.'*' IN BOOLEAN MODE) LIMIT 5"; 
$r = mysqli_query ($dbc, $q) or trigger_error("Query: $q\n<br />MySQL Error: " . mysqli_error($dbc)); 

if (mysqli_num_rows($r) > 0) {//if there are tags that match what the user typed 

while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) { 

$tag = $row['name']; 

$tagSuggestions[] = $tag; 

} 

echo json_encode($tagSuggestions); 

} 

} 

?> 

的Javascript:

$(function(){ 
     function sendTag(str){ 
      $.post("../includes/create_set.ajax.php",{ sendTag: str }, 
      function(data){ 
       for (var key in data.returnTag) { 
        if(data.returnTag.hasOwnProperty(key)) { 
         $('#tagSuggestTag').html('<li class="tagSuggestTag">' + data.returnTag + "<li>"); 
        } 
       } 
      }, "json"); 

     } 

     $('#testTags').keyup(//on key press in tag field show the send the request and show the suggestions 
     function(){ 
      sendTag($(this).val()); 
      $('#tagSuggest').show(); 
     }); 
}); 

回答

1

我沒有看到data.returnTag應該是什麼,數據是一個簡單的數組。

所以你可以重複使用它

for(var i =0;i<data.length;++i) 

過,並通過data[i]

$('<li class="tagSuggestTag"/>').appendTo('#tagSuggestTag ul').text(data[i]); 
1

訪問循環內的項目。如果我讀這個權利,你基本上追加一個相同<li>通過循環中的每一次傳球。這似乎是有問題的位:

for (var key in data.returnTag) { 
    if(data.returnTag.hasOwnProperty(key)) { 
     $('#tagSuggestTag').html('<li class="tagSuggestTag">' + data.returnTag + "<li>"); 
    } 
} 

在這段代碼,你把#tagSuggestTag,我以爲是暗示框,應持有的建議名單,並替換它的HTML內容與單<li>。而且你每循環一遍都會這樣做。如果我是對的,你最終只能在推薦框中輸入1個項目。要解決此問題,請使用.append()而不是.html()。另外,你的提示框選擇器(ID)似乎是錯誤的。

例子:

for (var key in data) { 
    $('#tagSuggest ul').apend('<li class="tagSuggestTag">' + data[key] + "<li>"); 
} 

另外請注意,你調用返回的值是錯誤的。當從你的響應對象中獲得值時,你調用了不存在的data.returnTag,因爲在你的情況下,data是一個對象數組。相反,您應該遍歷data,而不是data.returnTag,並使用data[key]訪問屬性。

這很有可能存在比這更多的問題。