2010-11-18 5 views
4

Ich kann nicht die folgenden PHP + jQuery zum Arbeiten - alles, was ich möchte das Skript zu tun ist, übergeben Sie den Wert durch Ajax, und erhalten Sie die PHP zu greifen es, überprüfen Sie es übereinstimmt und 1 hinzufügen, um zu punkten.PHP + Jquery - Wert durch Ajax zu PHP übergeben und gegen Variable

Dies ist der Code, den ich geschrieben habe:

<?php 
$score = "1"; 

$userAnswer = $_POST['name']; 

if ($_POST['name'] == "145"){ 
    $score++; 
}else{ 
    //Do nothing 
} 

echo $score; 

?> 


<script type="text/javascript"> 

$(document).ready(function() { 

    $("#raaagh").click(function(){ 

    var value = "145"; 

    alert(value); 

    $.ajax({ 
     url: 'processing.php', //This is the current doc 
     type: "POST", 
     data: ({name: value}), 
     success: function(){ 
      location.reload(); 
     } 
    }); 


    }); 
}); 

</script> 

<p id="raaagh">Ajax Away</p> 

Danke für die Hilfe, ich habe in beiden Fällen zu POST geändert GET, und keine Freude - es etwas anderes ist falsch.

+0

Und genau das, was ist das Problem? –

+0

Fragen ohne Beschreibung der Probleme sind schwer zu beantworten. "Es funktioniert nicht" ist keine gut genug Beschreibung. –

Antwort

17

Zunächst einmal: Seien Sie nicht zu den dunklen Zeiten zurück ... don benutze das selbe Skript um HTML zu generieren und auf eine Ajax Anfrage zu antworten.

Ich kann keinen Sinn für das, was Sie versuchen, machen ... Lassen Sie mich Ihren Code ändern, damit es zumindest Sinn macht und dokumentiert, was vor sich geht. Es scheint, dass das Problem darin besteht, dass Sie location.reload von Ihrem Erfolgs-Handler aufrufen.

// ajax.php - Ausgänge 2, wenn der Name Parameter 145, 1 sonst (????)

<?php 
$score = "1";  
$userAnswer = $_POST['name'];  
if ($_POST['name'] == "145"){ 
    $score++; 
}  
echo $score;  
?> 

// test.html

<script type="text/javascript"> 
$(document).ready(function() {  
    $("#raaagh").click(function(){  
     $.ajax({ 
      url: 'ajax.php', //This is the current doc 
      type: "POST", 
      data: ({name: 145}), 
      success: function(data){ 
       // Why were you reloading the page? This is probably your bug 
       // location.reload(); 

       // Replace the content of the clicked paragraph 
       // with the result from the ajax call 
       $("#raaagh").html(data); 
      } 
     });   
    }); 
}); 

</script> 

<p id="raaagh">Ajax Away</p> 
+0

Sie haben mir gerade große Kopfschmerzen erspart - ich benutze immer noch das Self-Reload-Ding, also war das nicht der Bug - aber was auch immer sich geändert hat, hat es behoben. DANKE! – Richard

+1

"Was auch immer sich geändert hat" ist die Tatsache, dass Sie jetzt nicht den HTML-Teil der Seite für den Ajax-Anruf ausgeben. –

2

Sie verwenden POST in Ihrem jQuery, aber Sie versuchen und erhalten Sie einen GET in Ihrem PHP.

BTW ist es gute Praxis zu überprüfen, ob eine GET/POST-Variable vor dem Lesen gesetzt ist. mit der isset() Funktion.

0

Ersetzen $_GET mit $_POST und da sind Sie. POST und GET sind zwei verschiedene Arten, Variablen an ein Skript zu übergeben. Die Methode get in PHP kann auch am Ende einer URL angehängt werden: script.php?variable=value und es ist wirklich einfach zu hacken. Während die Post-Methode mit Formularen oder Ajax-Aufrufe eingereicht werden kann, und es ist ziemlich sicher, zumindest mehr als die bekommen. Auch ich würde vorschlagen, Sie überprüfen, was eine GET oder POST-Variable vor dem Aufruf festgelegt ist, so dass Sie blöde Benachrichtigung Fehler verhindern können.

Benutzen Sie einfach den folgenden Code:

if (isset($_POST['var']) and !empty($_POST['var'])) { // do something } 

Sie können auch das Löschen

}else{ 
// do nothing 
} 

Teil des Skripts, da die else-Klausel es nicht notwendig, immer ist.

0

Sie reichen die Daten mit einem Ajax POST ein, versuchen jedoch, sie aus einem GET auszulesen. Verwenden Sie entweder in Ihrem Ajax-Anruf oder $_POST['name'] in Ihrem PHP.

0

Das Problem ist, dass Sie jQuery verwenden, um Ihren Wert zu POST, aber Sie lesen es mit GET.

Sie sollten in der Lage sein, Ihr Problem zu beheben, indem Sie $ _GET Ändern [ ‚name‘] bis $ _POST [ ‚name‘]