从AJAX调用多个函数并返回单独的数据

时间:2014-02-03 05:42:02

标签: javascript php jquery ajax

我正试图从AJAX调用中获得两个不同的结果。我将_functionToRun传递给PHP文件,该文件使用switch语句来确定要运行的函数。

在PHP文件中,我回显出两个不同的单词数组...... newQuestWords()应该只返回一些单词。 parseHoveredText()应该返回数据库中的所有词汇。

然而,当我回应两者时,只有所有的词汇都被归还......

例如,在JavaScript中,log(hoveredWords[i]);应该显示数据库中可用的所有词汇,从`parseHoveredText()函数返回,但它没有显示任何内容。

为什么?

JavaScript的:

$(document).ready(function() {
    //initially append words to word bank   
    $.getJSON("php/Quests.php", { "_questNum" : questNum, "_functionToRun" : 1},
        function(returned_data) {
            wordsArray = returned_data;
            $.each(wordsArray, function(key, value) {   
                $(".wordBank_Words").append("<span class='bankword' data-display-word='" + key + "' ><b>" + key + "</b>: " + value + "</span><br/>");
            }
        );
    }); 

    //get all chinese/english words for hover over translation
    $.getJSON("php/Quests.php", {"_functionToRun" : 2},
        function(returned_data) {
            hoveredWords = returned_data;
            for (var i = 0; i < hoveredWords.length; i++) {
                log(hoveredWords[i]);
            }
    }); 

PHP:

<?php
    //if user's input is correct, increment task number, get next vocabulary
    $functionToRun = (isset($_GET['_functionToRun'])) ? $_GET['_functionToRun'] : 1;
    parseHoveredText();

    switch ($functionToRun) 
    {
        case 1:
            newQuestWords();
            break;
        case 2:
            parseHoveredText();
            break;
        default:
            echo "defaulted...";
    }


    function newQuestWords () {
        include 'DbConnect.php';
        $questNumber = (isset($_GET['_questNum'])) ? $_GET['_questNum'] : 1;

        $qry = 
         "SELECT t.*, v.* 
         FROM task t 
         INNER JOIN vocabtask vt ON (t.id = vt.taskid)
         INNER JOIN vocab v ON (v.id = vt.vocabid)
         WHERE vt.taskid = " . $questNumber;

        $sql = $mysqli->query($qry);

        $wordsArray = array();
        while ($row = $sql->fetch_assoc()) {
            $wordsArray[$row['chinese']] = $row['english'];
        }
        mysqli_close($mysqli);  
        echo  json_encode($wordsArray);

    }

    function parseHoveredText () {
        include 'DbConnect.php';

        $qry = 
         "SELECT v.*
         FROM vocab v";

        $sql = $mysqli->query($qry);

        $hoveredWords = array();
        while ($row = $sql->fetch_assoc()) {
            $hoveredWords[$row['chinese']] = $row['english'];
        }
        mysqli_close($mysqli);  
        //return Chinese and English Words
        echo  json_encode($hoveredWords);

    }   
?>

1 个答案:

答案 0 :(得分:1)

转储return_data,它是json对象而不是可以迭代的数组。你可以这样迭代它

...
function(returned_data) {
    for (word in returned_data) {
        console.log(word);
    }
}
...

或者使用$ .each

...
$.each(returned_data, function(key, value) {   
    console.log(value);
}
...