簡體   English   中英

為什么在使用AJAX / PHP時會收到未定義索引錯誤?

[英]Why am I receiving an Undefined Index error when using AJAX/PHP?

我目前正在開發一個遠程控制應用程序,其中試圖將操縱桿坐標從Javascript發送到PHP。 但是,由於出現未定義索引錯誤,所以我永遠無法通過PHP文件訪問數據。

我知道這個問題已經解決了很多次,但是過去一周我一直在論壇和Google上瀏覽,而我嘗試過的所有解決方案都沒有奏效,所以如果有人可以看一下我的代碼來解決這個問題,我將不勝感激。看看我是否有一些基本的誤解或特定於應用程序的問題。

編輯:我忘了提起此事,但是我嘗試了一些其他人在線發布的示例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
    }
?>

錯誤信息:

注意:未定義的索引:第2行的C:\\ xampp \\ htdocs \\ TeachMoverInterface \\ ajax.php中的x

PHP $ _POST數組似乎為空。

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

在此處輸入圖片說明

在此處輸入圖片說明

就像我說的,過去一周我一直在看論壇,因此,為了解決問題,我嘗試執行的一些操作是更改格式,更改ajax方法中的緩存和異步屬性,用a代替ajax調用。 $ .post調用或XMLHttpRequest,用ajax調用中的數字替換JavaScript變量,以及我忘記的其他一些方法。

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

修改您的ajax.php代碼

正如一些人指出的那樣,我在Google Chrome控制台上的屏幕截圖顯示,ajax.php文件正在接收ajax調用發送的數據。 我的錯誤是我認為直接訪問ajax.php文件應該輸出數據,但是正如Jay Blanchard指出的那樣,這是不正確的方法。 感謝所有指出我的錯誤的人。 另外,還要感謝Jeremy Harris提到的AJAX替代方案,它在時間性能方面可能更適合我的應用程序。

將數據:{x:x_value}更改為數據:{“ x”:x_value},

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM