2016-11-06 3 views
0

Nachdem durch das Surfen im Internet, und irgend W3schools Beispiel suchen (wenn auch es in .asp war) habe ich beschlossen, die folgende Funktion in meiner JS-Datei zu schreiben:Wie funktioniert diese Ajax-Anfrage?

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; 
    }); 
} 

Es hat eine .php-Datei verweist, die verwendet zu sein .html, das einen Selektor enthält, der mit einer populateDropDown-Funktion aus unserer babynames.php gefüllt wird. Ich frage mich, wie man die obige JS-Funktion mit dieser PHP-Funktion verknüpfen kann:

Ich benutzte die folgenden zwei Websites. http://www.w3schools.com/jquery/jquery_ajax_get_post.asp und auch http://phplens.com/phpeverywhere/node/view/32 seit w3schools verwendet ASP-Code anstelle von PHP.

Das Endergebnis wäre also, dass das aktuell leere div "meaning" mit dem Bedeutungsergebnis gefüllt wird, das wir bekommen, nachdem wir eine Datei analysiert haben. Allerdings, wenn ich manuell die obige Populate-Funktion innerhalb meiner index.php mit der Verwendung sagt undefined Index, und es beginnt mit der POST-Methode als das Problem. Wenn ich diese Funktion nicht einbeziehe, bin ich ziemlich sicher, dass sie nie ausgeführt wird.

Also, um zu schließen, wie das gewünschte Ergebnis (das ist div wird auf die geparste Bedeutung gesetzt), und wo habe ich schief gehen bei der Übersetzung dieser W3schools Beispiel in meinen Code?

+1

Ich bezweifle, jQuery hat eine Art von "Bedeutung" - "Typ:" Bedeutung "'. –

+0

wahrscheinlich so, aber basierend auf meinem begrenzten Verständnis ist es nicht wie Parameter an die PHP-Datei übergeben? Also wäre es wie babynames.php? Type = Bedeutung & Name = ? Momentan möchte ich nur den Namen Aspekt davon arbeiten lassen. – SomeStudent

+0

@ Fred-ii-das zweite Argument zu [$ .post()] (https://api.jquery.com/jquery.post/) ist Daten, nicht $ .ajax config – Dymos

Antwort

0

Ihre PHP-Funktion nicht in der Lage POST Anfrage
zuerst erhalten Sie Ihre Post Parameter

$option = $_POST['name']; 
$type = $_POST['type']; 

passieren diese Variablen zu PHP-Funktion

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; 
     } 
    } 
} 

Jetzt funktioniert es zu fangen.
Ihre jQuery-Code ist nicht erforderlich, richtig

Dann

populateMeaning($option,$type); 
+0

Werde das versuchen, jetzt, wenn Sie Anruf sagen, ist es in der index.php? – SomeStudent

+0

Nein in babynames.php –

+0

immer noch nicht gehen. Dieser Teil des Div bleibt leer. – SomeStudent

0

In babynames.php Sie

populateMeaning(); 

zu nennen haben, nachdem Sie die Funktion definiert rufen Funktion php zu ändern.

0

So fand ich eine Lösung auf folgende Arten:

Ich habe eine andere PHP-Datei, dessen einzige Funktion die PHP-Funktion aufrufen, die ich benötige, wie folgt:

require_once 'babynames.php'; 

if(isset($_GET['name'])) { 
    $option = $_GET['name']; 

    populateMeaning($option, NULL); 
} 

In der babynames.php Datei, Die entsprechende Funktion gibt die Bedeutung wieder.

Die JS sieht dann wie folgt aus:

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; 
    }); 
} 

, die überhaupt von der ursprünglichen nicht wirklich verändert hat. Ich glaube das fehlende Stück war die isset.