浏览网页后,查看一些W3schools示例(尽管它是在.asp中)我决定在我的JS文件中编写以下函数:
function meaning(){
var sel = $("#allnames");
var name = sel.options[sel.selectedIndex].value;
$.post("babynames.php",
{
type: "meaning",
name: name
},
function (data) {
document.getElementById("meaning").innerHTML = data;
});
}
它引用一个.php文件,该文件曾经是.html,其中包含一个选择器,该选择器通过包含来自babynames.php的populateDropDown函数来填充。我想知道如何将上面的JS函数链接到这个php函数:
function populateMeaning() {
$meanings = fopen("meanings.txt", "r") or die("Unable to open file");
$option = $_POST['name'];
$type = $_POST['type'];
while(!feof($meanings)) {
$selectOption = strtoupper($option);
$line = fgets($meanings);
if(strpos($line,$selectOption ) !== false) {
$meaning = substr($line, strpos(0, ' '), strlen($line));
ob_start();
print $meaning;
ob_end_flush();
break;
}
}
}
我使用以下两个网站。 http://www.w3schools.com/jquery/jquery_ajax_get_post.asp以及http://phplens.com/phpeverywhere/node/view/32因为w3schools使用.asp代码而不是php。
所以最终的结果是当前空的div"意思是"由我们解析文件后获得的意义结果填充。但是,如果我在index.php中手动包含上面的populate函数,使用它表示未定义的索引,并以POST方法作为问题开始。如果我不包含所述函数,那么我很肯定它永远不会被执行。
因此,总而言之,如何获得所需的结果(即将div设置为已解析的含义),以及在将W3schools示例转换为我的代码时出错的地方?
答案 0 :(得分:0)
您的php函数无法捕获POST
请求
首先得到你的帖子参数
$option = $_POST['name'];
$type = $_POST['type'];
将这些变量传递给php函数
function populateMeaning($option,$type) {
$meanings = fopen("meanings.txt", "r") or die("Unable to open file");
while(!feof($meanings)) {
$selectOption = strtoupper($option);
$line = fgets($meanings);
if(strpos($line,$selectOption ) !== false) {
$meaning = substr($line, strpos(0, ' '), strlen($line));
ob_start();
print $meaning;
ob_end_flush();
break;
}
}
}
现在它会起作用。
你的jquery代码是正确的,无需更改
然后调用php函数
populateMeaning($option,$type);
答案 1 :(得分:0)
在babynames.php中你只需要打电话
populateMeaning();
定义功能后。
答案 2 :(得分:0)
所以我找到了使用以下内容的解决方案:
我制作了另一个php文件,其唯一的功能是调用我需要的php函数,如下所示:
require_once 'babynames.php';
if(isset($_GET['name'])) {
$option = $_GET['name'];
populateMeaning($option, NULL);
}
在babynames.php文件中,相应的函数回显了这个含义。
JS看起来像这样:
function meaning(){
// var sel = $("#allnames");
// var name = sel.options[sel.selectedIndex].value;
nested = document.getElementById("allnames");
nested = nested.options[nested.selectedIndex].value;
$.get("populateMeaningActual.php",
{
type: "meaning",
name: nested
},
function (data) {
//alert("Data loaded " + data);
document.getElementById("meaning").innerHTML = data;
});
}
原来并没有真正改变。我相信缺少的部分是isset
。