2016-07-05 9 views
2

Ich arbeite gerade an einer Telecontrol-Anwendung, in der ich versuche, Joystick-Koordinaten von Javascript zu PHP zu senden. Ich kann jedoch nie auf die Daten über die PHP-Datei zugreifen, da ich einen Undefinierten Indexfehler erhalte.Warum erhalte ich einen Undefinierten Indexfehler bei der Verwendung von AJAX/PHP?

Ich bin mir bewusst, dass diese Frage viele Male angesprochen wurde, aber ich habe die vergangene Woche durchforstet Foren und Google und keine der Lösungen, die ich versucht habe gearbeitet, so würde ich es begrüßen, wenn jemand einen Blick darauf werfen könnte an meinem Code, um zu sehen, ob ich ein grundlegendes Missverständnis oder ein anwendungsspezifisches Problem habe.

EDIT: Ich vergaß, dies früher zu erwähnen, aber ich hatte einige Beispiel PHP/AJAX-Code versucht, die andere online veröffentlicht haben, und die Ausführung dieses Codes hat auch nicht funktioniert, was mich denken, dass dies ein Problem mit meinem ist Serverkonfiguration

Mein Code: (Enthält nur Dateien, die für das Problem relevant sind. Wenn Sie die anderen Dateien im Projekt sehen möchten, lassen Sie es mich wissen.) Die JavaScript- und PHP-Dateien befinden sich im selben Verzeichnis . Ich benutze XAMPP.

joystick.js (enthält Ajax-Aufruf)

var hasGP = false; 
var repGP; 

// Joystick State Variables 
var triggerPressed; 
var x_value; 
var y_value; 
var z_value; 
var t_value; 

function canGame() 
{ 
    return "getGamepads" in navigator; 
} 

function reportOnGamepad() 
{ 
    // Display the gamepad's ID. 
    var gp = navigator.getGamepads()[0]; 
    var html = ""; 
    html += "<u>ID</u>: " + gp.id + "<br>"; 

    // Display the status of the x-axis. 
    x_value = gp.axes[0]; 
    html += "<u>x-axis</u>: " + x_value + "<br>"; 

    // Display the status of the y-axis. 
    trigger_pressed = gp.buttons[0].pressed; 
    y_value = gp.axes[1]; 
    if (trigger_pressed) 
    { 
     html += "<u>Pitch angle</u>: " + y_value + "<br>"; 
    } 
    else 
    { 
     html += "<u>y-axis</u>: " + y_value + "<br>"; 
    } 

    // Display the status of the z-axis. 
    z_value = gp.axes[3]; 
    html += "<u>z-axis</u>: " + z_value + "<br>"; 

    // Display the status of the t-axis. 
    t_value = gp.axes[2]; 
    html += "<u>Roll angle</u>: " + t_value + "<br>"; 

    $("#gamepadDisplay").html(html); 

    $.ajax({ url: 'ajax.php', 
     type: 'POST', 
     data: {x:x_value}, 
     success: function(data) 
     { 
      console.log("x_value " + data + " has been sent to the server."); 
     } 
    }); 

} 

$(document).ready(function() 
{ 
    if(canGame()) 
    { 
     var prompt = "To begin using your gamepad, connect it and press any button!"; 
     $("#gamepadPrompt").text(prompt); 

     $(window).on("gamepadconnected", function() 
     { 
      hasGP = true; 
      $("#gamepadPrompt").html("<b>The gamepad has been successfully connected.</b><br><br>"); 
      console.log("connection event"); 
      repGP = window.setInterval(reportOnGamepad,100); 
     }); 

     $(window).on("gamepaddisconnected", function() 
     { 
      console.log("disconnection event"); 
      $("#gamepadPrompt").text(prompt); 
      window.clearInterval(repGP); 
     }); 

     // Set up an interval for Chrome 
     var checkGP = window.setInterval(function() 
     { 
      console.log('checkGP'); 
      if(navigator.getGamepads()[0]) 
      { 
       if(!hasGP) $(window).trigger("gamepadconnected"); 
       window.clearInterval(checkGP); 
      } 
     }, 500); 
    } 
}); 

ajax.php (Datei, an die Javascript-Daten gesendet werden)

<?php 
    $temp = $_POST['x']; 
    if(isset($temp) && !empty($temp)) 
    { 
     echo "x value is ". $temp ."!"; // Success Message 
    } 
?> 

Fehlermeldung:

Hinweis: Undefinierter Index: x in C: \ xampp \ htd ocs \ TeachMoverInterface \ ajax.php auf Leitung 2

Die PHP $ _POST Array erscheint leer zu sein.

Möglicherweise Hilfreiche Browser Debuggen Info:

enter image description here

enter image description here

Wie gesagt, ich habe in der letzten Woche in Foren gesucht, so dass einige der Aktionen habe ich versucht, um zu beheben Das Problem war, die Formatierung zu ändern, Cache und asynchrone Attribute in der Ajax-Methode zu ändern, den Ajax-Aufruf durch einen $ .post-Aufruf oder XMLHttpRequest zu ersetzen, die JavaScript-Variable durch eine Zahl im Ajax-Aufruf zu ersetzen und einige andere Methoden, die ich vergessen habe .

+4

Wenn das '$ _POST'-Array leer ist, wie erhalten Sie die in Ihrem Screenshot angezeigte Nachricht (d. H."x Wert ist ...")? – showdev

+2

Was passiert, wenn Sie am Anfang die '$ _POST'-Variable' var_dump() '' eingeben? Ich frage mich, ob 0.00684 ... auf Null gerundet wird und anschließend "falsy" in Ihrer 'leeren()' Prüfung. –

+0

Wie sieht die Anfrage an den Server aus, wenn dieser Fehler auftritt? Sie zeigen einen erfolgreichen Anruf an. – epascarello

Antwort

0

Da mehrere Leute haben darauf hingewiesen, mein Screenshot der Google Chrome-Konsole zeigt, dass die ajax.php-Datei die vom ajax-Aufruf gesendeten Daten empfängt. Mein Fehler war, dass ich glaubte, dass der Zugriff auf die ajax.php-Datei direkt die Daten ausgeben sollte, da Jay Blanchard jedoch darauf hinwies, dass dies ein falscher Ansatz war. Danke für alle, die auf meinen Fehler hingewiesen haben. Auch, dank Jeremy Harris für die Erwähnung einer Alternative zu AJAX, die für meine Anwendung in Bezug auf die Zeitleistung besser geeignet sein könnte.

-1

Daten ändern: {x: x_value}, in Daten: { "x": x_value},

+1

Ich denke, 'x' sollte immer noch gut funktionieren ohne Anführungszeichen (obwohl es technisch nicht korrekt ist nach ECMAScript-Standards), da es kein reserviertes Wort ist. –

+0

Das ist 100% gleich – epascarello

0
<?php 
if(!empty($_POST)){ 
    $temp = $_POST['x']; 
    if(isset($temp) && !empty($temp)) 
    { 
     echo "x value is ". $temp ."!"; // Success Message 
    } 
} 
?> 

ändern Ihre ajax.php Code

+3

Dies kann den "Undefined index" Fehler verhindern, indem zuerst nach einem leeren Array gesucht wird, aber es erklärt nicht das Problem oder warum das '$ _POST' Array leer ist. – showdev

Verwandte Themen