【问题标题】:Javascript two weird problems: POST not working, window.location.href not workingJavascript 两个奇怪的问题:POST 不工作,window.location.href 不工作
【发布时间】:2015-09-06 10:02:50
【问题描述】:

我使用 JQuery 创建了一个类似于 google 搜索的即时搜索。突出显示的代码不起作用。这很奇怪,因为它们自己工作正常,而其他一切工作正常。知道为什么会这样吗? Q1.

searchq() 工作正常,但 createq() 函数不起作用,变量 txt 可以发布到其他文件(search.php)。但是,函数 createq() 不能 POST。测试后确实得到了全局变量txt,但是无论我使用什么POST方法,php文件(create_object.php)都无法得到它。任何人都可以帮助编写一些可以在我的代码中使用的 POST 代码。

第二季度 我想创建一个函数,当按下回车键时,用户将被重定向到第一个搜索结果(以 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);

    }

?>

【问题讨论】:

  • 您不应将多个问题作为一个问题发布,这会降低您获得答案的机会。
  • **$.post 在函数createq - 我猜你加载页面时控制台有错误
  • @RamRaider 据我了解,星星应该标记问题中提到的突出显示的代码。
  • 啊!我想这是有道理的

标签: javascript php jquery search


【解决方案1】:

createq() 中,您试图访问在另一个函数中定义的局部变量txt。如果您在函数中声明变量,则只有该函数可以访问该变量。

您可以通过将 txt 作为 参数 传递给 createq 来解决此问题。为此,您需要自己调用createq,而不是将其设置为点击事件的事件处理程序。

使用 jqoery 的 .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){
    ...
}

【讨论】:

    【解决方案2】:

    关于页面刷新的方式。如果缺少 id 为 window.location.href 的 DOM 元素,页面将刷新。例如 假设你有 window.location.href="#div1"; 如果缺少 id="div1" 的 DOM 元素,页面肯定会刷新。

    【讨论】:

      猜你喜欢
      • 2012-04-24
      • 2011-03-21
      • 2013-08-20
      • 2013-02-08
      • 2023-03-28
      • 1970-01-01
      • 2021-05-12
      • 2023-01-13
      • 1970-01-01
      相关资源
      最近更新 更多