将文本输入变量传递到PHP以进行Div加载


Pass Text Input Variable to PHP for Div Loading

我有一个网页,我想在那里有一个输入框和一个搜索按钮。它将搜索与输入框匹配的电影。搜索和解析是通过php完成的,但我希望结果显示在原始页面上,作为更新的div

<script type="text/javascript">
    function goSearch(){
        $("#Moviesearchdiv").load("MovieSearch.php");
     }
</script>
<form action="JavaScript:goSearch()" method="POST">
    <input type="text" name="moviename">
    <input type="submit" name="submit" value="Search" >
</form>
<div id="Moviesearchdiv"></div>

我的MovieSearch.php看起来像这样:

<?php
$themovie = $_POST["moviename"];
$myurl = "http://my-url-here.com/search/?q={$themovie}";
    $response = file_get_contents($myurl);
    $result = json_decode($response, true);
    $result=$result['movies'];
    $totality = count($result);
    for ($i = 0; $i <$totality; $i++) {
        $mymovietitle = $result[$i]['original_title'];
        $myposter = $result[$i]['poster_original'];
        echo "<li><img src={$myposter} >{$mymovietitle}</li>";
    }
?>

当我按原样运行时…什么都没发生。如果我手动更改MovieSearch.php中的第一个变量以读取类似以下内容:

$themovie = "Rocky";

这将按预期正确加载我的div中的所有Rocky电影,而不会刷新页面。

如何将"moviename"输入正确地传递到php?

非常感谢您的帮助和建议。

谢谢,

Hernando

a(您没有将数据传递到页面(.load中的第二个参数应该是表单数据(,因此$themovie的值为null。

b( 即使您的表单上有method="POST",使用.load也会假定为GET,除非提供的数据是对象。以对象格式(以POST形式发送(提供表单数据的一种方法是:

function goSearch(){
   $("#Moviesearchdiv").load("MovieSearch.php",$('#yourFormId').serialize());
}

请注意,您需要在表单中添加一个ID,并用它替换#yourFormId。

当调试这些类型的AJAX调用时,首先你需要知道你试图与之通信的页面位于AJAX调用认为的位置。你知道这是因为当你填写$themovie时,你会得到结果,你也可以在浏览器的开发工具中检查这一点。

其次,你需要确保你发送的数据是你认为的,你可以通过返回$_POST或$_GET的print_r((或var_dump((来检查这一点,这取决于你的使用(或者在这种情况下你认为你在使用(。

这两个步骤将使你解决你发现的大部分问题。

一些想法:

  • 实际将文本输入的内容发送到php脚本的哪里?

  • 在将结果附加到url之前,请尝试对从$_POST获得的结果使用trim()

  • 对变量$_POST执行var_dump(),看看服务器会发生什么——您可能会感到惊讶。