2015-09-06 77 views
-1

我創建了一個類似於谷歌搜索使用JQuery的即時搜索。突出顯示的代碼不起作用。這是奇怪的,因爲他們自己的工作很好,其他一切正常工作。任何想法爲什麼發生這種情況? Q1。 searchq()工作正常,但createq()函數不起作用,變量txt可以發佈到其他文件(search.php)。但是,函數createq()不能POST。它在測試後得到了全局變量txt,但是無論使用什麼POST方法,php文件(create_object.php)都無法得到它。任何人都可以幫助寫一些可以在我的代碼中工作的POST代碼。Javascript兩個奇怪的問題:POST不工作,window.location.href不工作

Q2 我想創建一個函數,當按下回車鍵時,用戶將被重定向到第一個搜索結果(用一個url來錨定)。爲了達到這個目的,我創建了一個函數,讓變量redirectUrl將錨定的url作爲字符串獲取,但是,重定向函數window.location.href不起作用,頁面只是刷新了。我通過自己在另一個文件中測試了window.location.href函數,它雖然工作。這很奇怪,我的網頁只是刷新,它甚至刷新,當我直接到谷歌。 window.location.href( 「www.google.com」)。

請注意,我沒有在這裏包括連接到數據庫功能。因爲我認爲數據庫的用戶名和密碼設置與您的不同,所以如果您想測試它,請自行創建。 mysql被設置爲一個名爲「objects」的表,並且它有一個名爲「name」的列。

在此先感謝!

<html> 
    <!-- google API reference --> 
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 
    <!-- my own script for search function --> 

    <center> 
    <form method="POST"> 
     <input type="text" name="search" id="search" style="width:400px " placeholder="Search box" onkeyup="searchq();"> 
     <div id="search_output"> 
     </div> 
    </form> 
    </center> 

     <!-- instant search function --> 
<script type="text/javascript"> 

function searchq(){ 
     // get the value 
      var txt = $("input").val(); 
      // post the value 
      if(txt){ 
       $.post("search.php", {searchVal: txt}, function(result){ 
        $("#search_output").html(result+"<div id=\"create\" onclick=\"creatq()\"><br>Not found above? Create.</div>"); 
       }); 
      } 
      else{ 
       $("#search_output").html(""); 
      } 


     }; 
function createq(){ 
    // allert for test purpose: test if the txt has got by the createq function 
    alert(txt); 
    **$.post("create_object.php",{creatVal:txt});** 

} 

// if enter key pressed, redirect page to the first search result 
$("#search").keypress(function(evt){ 
    if (evt.which == 13) { 
     // find the first search result in DOM and trigger a click event 
     var redirectUrl = $('#search_output').find('a').first().attr('href'); 
     alert(redirectUrl); 
     **window.location.href = "www.google.com"; 
window.location.href = "www.google.com";** 
    } 
}) 

</script> 
    </html> 

PHP文件(的search.php)

<?php 
if(isset($_POST["searchVal"])){ 
    //get the search 
    $search=$_POST["searchVal"]; 
    //sort the search 
    $search=preg_replace("#[^0-9a-z]#i","",$search); 
    //query the search 
    echo "<br/>SELECT * from objects WHERE name LIKE '%$search%'<br/>"; 
    $query=mysqli_query($conn,"SELECT * from objects WHERE name LIKE '%$search%'") or die("could not search!"); 
    $count=mysqli_num_rows($query); 
    //sort the result 
    if($count==0){ 
     $output="there was no search result"; 
    } 
    else{ 
     while($row=mysqli_fetch_assoc($query)){ 

      $object_name=$row["name"]; 

      $output="<div><a href='##'>".$object_name."</a></div>"; 
     } 
    } 
    echo $output; 
} 
?> 

php文件(create_object.php)

<?php 
    if(isset($_POST["createVal"])){ 
     $name=$_POST["createVal"]; 
     var_dump($name); 

    } 

?> 
+3

您不應將多個問題作爲一個問題發佈,這會減少獲得答案的機會。 – regular

+0

'** $。post'在函數'createq' - 我猜控制檯中有錯誤當你加載頁面 – RamRaider

+0

沒有錯誤在控制檯 – raichuchu

回答

1

createq()您試圖訪問本地變量txt在中定義另一個功能。如果你在一個函數內聲明瞭一個變量,那麼只有該函數可以訪問這個變量。

您可以通過將txt作爲參數傳遞給createq來解決此問題。爲了做到這一點,您需要自己調用createq而不是將其設置爲單擊事件的事件處理程序。

使用jqoery的.click()爲click事件添加適當的事件處理函數,並從該處理函數調用createq中傳遞值,傳遞值爲txt。爲了設置點擊處理程序,你需要引用一個id爲「create」的元素,你目前沒有。

解決這個特定的問題看起來是這樣的:

$.post("search.php", {searchVal: txt}, function(result){ 
    $("#search_output").html(result+"<div id=\"create\"><br>Not found above? Create.</div>"); 
    $("#search_output create").click(function() { 
     createq(txt); 
    }); 
}); 

... 

function createq(txt){ 
    ... 
} 
0

關於路線頁面刷新。如果缺少window.location.href的id的DOM元素,頁面將刷新。例如 假設你有window.location.href =「#div1」; 如果缺少id =「div1」的DOM元素,頁面肯定會刷新。