2016-07-05 4 views
2

В настоящее время я работаю над приложением телеуправления, в котором я пытаюсь отправить координаты джойстика с Javascript на PHP. Тем не менее, я никогда не могу получить доступ к данным через PHP-файл, так как получаю ошибку Undefined Index.Почему я получаю ошибку Undefined Index при использовании AJAX/PHP?

Я знаю, что этот вопрос был рассмотрен много раз, но я провел прошлую неделю, проходя через форумы и Google, и ни одно из решений, которые я пробовал, не сработало, поэтому я был бы признателен, если бы кто-нибудь мог взглянуть в моем коде, чтобы узнать, есть ли у меня какое-то фундаментальное недоразумение или проблема с конкретными приложениями.

EDIT: Я забыл упомянуть об этом ранее, но я пробовал пример кода PHP/AJAX, который другие опубликовали в Интернете, и запуск этого кода тоже не работает, что заставляет меня думать, что, возможно, это проблема с моим конфигурации сервера.

Мой код: (только включает файлы, которые, как я считаю, имеют отношение к проблеме; , Я использую 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 в строке 2

Массив PHP $ _POST кажется пустым.

Возможно полезное сообщение Browser отладочные:

enter image description here

enter image description here

Как я уже говорил, я смотрел на форумах на прошлой неделе, так что некоторые действия, я пытался, чтобы исправить проблема заключалась в изменении форматирования, изменении кеша и асинхронных атрибутов в методе ajax, замените вызов ajax вызовом $ .post или XMLHttpRequest, заменив переменную JavaScript номером в вызове ajax и некоторыми другими методами, которые я забыл ,

+4

Если массив '$ _POST' пуст, как вы получите сообщение, показанное на вашем снимке экрана (т."x value is ...")? – showdev

+2

Что произойдет, если вы 'var_dump()' '$ _POST' переменная в начале? Мне интересно, если 0.00684 ... округляется до нуля, а затем «фальшиво» в вашей 'пустой()' проверке. –

+0

Как выглядит запрос на сервер при возникновении этой ошибки? Вы показываете успешный звонок. – epascarello

ответ

0

Как несколько человек указали, мой скриншот консоли Google Chrome показывает, что файл ajax.php получает данные, отправленные вызовом ajax. Моя ошибка заключалась в том, что я полагал, что доступ к файлу ajax.php напрямую должен выводить данные, однако, как сказал Джей Бланшар, это был неправильный подход. Спасибо всем, кто указал на мою ошибку. Кроме того, благодаря Джереми Харрису за упоминание альтернативы AJAX, которая может быть лучше подходит для моего приложения с точки зрения времени.

-1

Изменение данных: {х: x_value}, в данные: { "х": 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

Это может помешать ошибке «Undefined index», сначала проверив пустой массив, но это не объясняет проблему или почему массив '$ _POST' пуст. – showdev