php如何从服务器联系和提取信息

时间:2016-05-21 03:40:26

标签: javascript php json

我无法理解我的代码,了解php实际上如何与服务器通信并从文件中提取信息。因为我真的没有看到完整网址的来源。我对php很新,所以我很茫然。代码显示来自http://webster.cs.washington.edu/cse154/services/flashcards的信息 但我真的没有看到它的位置,特别是访问这些路径,我不知道如何获取信息来创建新的json和xmls。就像我想要提取一个txt文件一样,让我们​​说一个组成网站:http://jackson.hubert.com/coolstuff和coolstuff有txt文件,这段代码是如何得到这些信息的?对不起,如果这是一个非常愚蠢的问题

<?php
# Solution to CSE 154 Flashcard lab.
# generates a JSON list of categories if passed a parameter mode
# with the value of categories. Otherwise outputs a random question
# from the passed in category in XML.

$mode = $_GET["mode"];
$category = $_GET["category"];
$url = "../../cse154/services/flashcards/";

if($mode == "categories") {
    outputJson($url);

} else {
    outputXml($url, $category);
}

# outputs the list of available categories in JSON
function outputJson($url) {
    $files = glob($url . "*");
    $json = array("categories" => array());
    foreach($files as $file) {
        $count = count(glob($file."/*"));
        $json["categories"][basename($file)] = $count;
    }

    header("Content-type: application/json");
    print(json_encode($json));
}

# outputs a random question about the provided category in XML
function outputXml($url, $category) {
    $files = glob($url . "$category/*");
    $index = array_rand($files);
    // this is a great place to use list!!
    list($ques, $ans) = file($files[$index]);

    $dom = new DOMDocument();
    $card = $dom->createElement("card");
    $dom->appendChild($card);
    $question = $dom->createElement("question");
    $question->appendChild($dom->createTextNode($ques));
    $card->appendChild($question);
    $answer = $dom->createElement("answer");
    $answer->appendChild($dom->createTextNode($ans));
    $card->appendChild($answer);

    header("Content-type: text/xml");
    print($dom->saveXML());
}

?>


/* javascript */

(function() {
var category = "computerscience";
var xml = null;

// sets up onclick handlers
window.onload = function() {
    document.getElementById("viewAll").onclick = viewAll;
    document.getElementById("next").onclick = next;
};

// sends an ajax request to the passed in address.
// calls the passed in function when the request returns.
function ajax($adress, $function) {
    var request = new XMLHttpRequest();
    request.onload = $function;
    request.open("GET", $adress, true);
    request.send(); 
}

// makes a request for all of the categories.
function viewAll() {
    ajax("flashcards.php?mode=categories", displayAll); 
}

// displays all categories in a list on the page. 
function displayAll() {
    $json = JSON.parse(this.responseText); 
    for($cat in $json.categories) {
        var li = document.createElement("li");
        li.innerHTML = $cat; 
        li.onclick = choose;
        document.getElementById("categories").appendChild(li);
    } 
}

// sets a new category as the category all questions should come from. 
function choose() {
    category = this.innerHTML;
}

// displays the next question if it was last displaying an answer or nothing. 
// displays the answer to the previous question otherwise. 
function next() {
    if(!xml) {
        ajax("flashcards.php?category=" + category, displayNext);
    } else {
        document.getElementById("card").innerHTML = xml.querySelector("answer").textContent;
        xml = null;
    }
}

// displays the question that it recieved from the server.
function displayNext() {
    xml = this.responseXML;
    document.getElementById("card").innerHTML = xml.querySelector("question").textContent;
}
})();

0 个答案:

没有答案