如何使这个ajax请求工作?

时间:2016-11-06 01:16:59

标签: javascript php jquery html ajax

浏览网页后,查看一些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示例转换为我的代码时出错的地方?

3 个答案:

答案 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