2016-07-05 64 views
2

我目前正在研究一個遙控應用程序,我試圖從Javascript發送操縱桿座標到PHP。但是,我無法通過PHP文件訪問數據,因爲我收到了未定義的索引錯誤。爲什麼在使用AJAX/PHP時收到Undefined Index錯誤?

我知道這個問題已經解決了很多次,但是我已經花了一個星期的時間去討論論壇和谷歌,而且我嘗試過的解決方案都沒有工作,所以如果有人可以看一看,我將不勝感激。在我的代碼中查看是否存在一些根本性的誤解或特定於應用程序的問題。

編輯:我忘了提到這一點,但我曾嘗試過其他人在網上發佈的一些示例PHP/AJAX代碼,並且運行該代碼也不起作用,這使我認爲這可能是我的問題服務器配置。

我的代碼:(只包括我認爲與問題相關的文件;如果您希望看到項目中的其他文件,請通知我。) JavaScript和PHP文件位於相同的目錄中。我正在使用XAMPP。

joystick.js(包含AJAX調用)

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(文件到的Javascript數據應發送)

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

錯誤消息:

注意:未定義的索引:x在C:\ xampp \ htd ocs \ TeachMoverInterface \ ajax.php on line 2

PHP $ _POST數組似乎是空的。

可能有用的瀏覽器調試信息:

enter image description here

enter image description here

正如我所說的,我一直在尋找的論壇在過去的一週,所以有些動作我試圖以修復問題在於更改ajax方法的格式,更改緩存和異步屬性,將ajax調用替換爲$ .post調用或XMLHttpRequest,用ajax調用中的數字替換JavaScript變量,以及其他已忘記的方法。

+4

如果'$ _POST'數組爲空,那麼如何獲取屏幕截圖中顯示的消息(即,「x值是...」)? – showdev

+2

如果你在起始處var_dump()'$ _POST'變量會發生什麼?我想知道是否0.00684 ...被四捨五入爲零,隨後在'empty()'檢查中出現「falsy」。 –

+0

發生錯誤時,對服務器的請求是什麼樣的?您正在顯示成功的通話。 – epascarello

回答

0

正如一些人所指出的那樣,我的截圖Google Chrome控制檯顯示ajax.php文件正在接收ajax調用發送的數據。我的錯誤是我相信直接訪問ajax.php文件應該輸出數據,但正如Jay Blanchard指出的那樣是一種錯誤的方法。感謝大家指出我的錯誤。另外,感謝Jeremy Harris提到了AJAX的替代方案,它可能更適合我的應用程序的時間表現。

-1

更改數據:{X:X_VALUE},進入數據:{ 「X」:X_VALUE},

+1

我認爲'x'仍然可以正常工作,不用引號(即使ECMAScript標準在技術上不正確),因爲它不是保留字。 –

+0

這與100%相同 – epascarello

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

修改ajax.php代碼

+3

這可以通過首先檢查空數組來防止「未定義索引」錯誤,但它不能解釋問題或爲什麼'$ _POST'數組爲空。 – showdev

相關問題