2016-09-22 78 views
0

我正在嘗試向文本字段添加自動完成功能。 這曾經工作,但後來我切換到MVC結構,現在我無法恢復工作。xmlhttp.open似乎沒有在MVC結構中做任何事

PHP/HTML:

echo '<br><br>Add member:<br>' 
    . '<form method="post"><input type="text" name="username" oninput="findUsers(this.value)" list="livesearch">' 
    . '<datalist id="livesearch"></datalist>' 
    . '<input type="submit" value="Add">' 
    . '</form>'; 

的JavaScript:

<script> 
function findUsers(str) { 
    if (str == "") { 
     document.getElementById("livesearch").innerHTML = "no suggestions"; 
     xmlhttp.send(); 
    } else { 
     if (window.XMLHttpRequest) { 
       // code for IE7+, Firefox, Chrome, Opera, Safari 
       xmlhttp = new XMLHttpRequest(); 
     } else { 
       // code for IE6, IE5 
       xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
     xmlhttp.onreadystatechange = function() { 
       if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
         document.getElementById("livesearch").innerHTML = xmlhttp.responseText; 
       } 
     }; 
     xmlhttp.open("GET","/user/search/?q="+str,true); 
     xmlhttp.send(); 
    } 
} 
</script> 

/用戶/搜索打開一個名爲搜索在UserController.php類用戶文件功能

class UserController extends Controller 
{ 
public function search() 
    { 
     $response = "hello"; 
     echo $response; 
    } 
} 

所以這應該把「hello」消息放入livesearch數據集中。 但由於某種原因,什麼都沒有發生。 如果我用window.open替換xmlhttp.open,頁面會正常加載並顯示hello消息。但這顯然不是我想要的。


想通了確切的問題:

我xmlhttp.responseText也回到我的網站,該網站已經被加載在MVC結構的頭。

我該如何解決這個問題? 是否只是編輯字符串並獲取javascript中的最後一部分? 還是有更好的解決方案?

+0

你是什麼意思的「不工作」?你是否收到錯誤,或者你沒有看到預期的結果?如果是後者,那麼xmlhttp.onreadystatechange偵聽器可能會出現問題,那是什麼樣的? –

+0

它沒有顯示預期的結果 –

+0

@hairraisin更新了我的文章 –

回答

0

使用JavaScript來抓取字符串的最後部分(所以沒有標題) 它做它現在應該做的事情,但感覺像一個很「骯髒」的解決方案。

還必須添加<option value="">標記,該標記位於我的代碼中,但不在我的測試代碼中。

相關問題