Dave the Golfer Ответов: 1

Как прочитать возврат из xmlhttprequest()


Я пытаюсь прочитать значение и имя поля выбора. Имя, которое я использую в JavaScript для определения идентификатора другого поля выбора. Значение, которое я отправляю с помощью объект XMLHttpRequest() к PHP-файлу для поиска таблицы MySQL, чтобы определить номер, который мне нужно загрузить во второе поле выбора.
Я использую IDE NetBeans 8.2 и доказал, что PHP - файл работает правильно.
С помощью инструментов разработчика Chrome, я проследил за JavaScript-файл, и я получаю сообщение об ошибке на строке
document.getElementById(HCID).innerHTML = this.responseText;

Данная ошибка такова
The specified value "NaN" is not a valid number. The value must match to the following regular expression: -?(\d+|\d+\.\d+|\.\d+)([eE][-+]?\d+)?



Мой код скрипта
<script type="text/javascript">
    function find_hc(player,name){
        switch (name) {
        case "Player1":
            var HCID = 'P1HC';
            break;
        case "Player2":
            var HCID = 'P2HC';
            break;
        case "Player3":
            var HCID = 'P3HC';
            break;
        case "Player4":
            var HCID = 'P4HC';
            break;
        case "Player5":
            var HCID = 'P5HC';
            break;
        case "Player6":
            var HCID = 'P6HC';
            break;
        case "Player7":
            var HCID = 'P7HC';
            break;
        case "Player8":
            var HCID = 'P8HC';
            break;
        case "Player9":
            var HCID = 'P9HC';
            break;
        case "Player10":
            var HCID = 'P10HC';
            break;
        case "Player11":
            var HCID = 'P11HC';
            break;
        case "Player12":
            var HCID = 'P12HC';
            break;
        default:
            break;
      }
        var xhttp;
        if (window.XMLHttpRequest) {
            // code for modern browsers
            xhttp = new XMLHttpRequest();
            } else {
            // code for old IE browsers
            xhttp = new ActiveXObject("Microsoft.XMLHTTP");
            } 
            var the_data = 'player='+ encodeURIComponent(player)
            xhttp.open("POST", "find_handicap.php" , true);
            xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            xhttp.send(the_data);
            xhttp.onreadystatechange = function() {
//            alert('Check Xhttp.readyState ===4');
            if (xhttp.readyState === 4) {
//                alert('Check Xhttp.status ===200');
                if (xhttp.status === 200) {
                    // OK
                    alert('Response from PHP received');
                     alert(this.responseText);
                    var hc = parseInt(this.responseText);
                    document.getElementById(HCID).value = hc;
                    // loads handicap to player handicap id
                } else {
                    // not OK
                    alert('failure!');
                }
            }
        };
    }
                   
</script>


Мой PHP файл выглядит следующим образом;
<?php require_once '../../configure.php';
$Player  = $_POST["player"];
$Opponent = $_SESSION["Opponents"];
$Venue = $_SESSION["Venue"];
// Check if we have parameter that  being passed to the script through the URL

   if (isset($_POST["player"])) {
      $db_handle = mysqli_connect(DB_SERVER, DB_USER, DB_PASS );
      $db_found = mysqli_select_db($db_handle, DB_NAME);
      if ($db_found) {
      $SQL = "SELECT `handicap` FROM `".DB_AVAIL."` WHERE `player_name`= '$Player' AND `opponents` = '$Opponent' AND `venue` = '$Venue'";
      $result = mysqli_query($db_handle, $SQL);
      while ( $db_field = mysqli_fetch_assoc($result) ) {
              $Handicap = $db_field[handicap];}
      }
      echo json_encode($Handicap);
   }
   ?>


Что я уже пробовал:

В моем скрипте я включил два предупреждения
alert('Response from PHP received');
     alert(this.responseText);
Во - первых, чтобы показать, что я получил ответ из файла PHP. Это было успешно.

Во втором предупреждении я ожидал увидеть число от 0 до 28, В приведенном ниже случае я ожидал увидеть 16, вместо этого я получил много кода перед номером. Следующим образом;
\u003Cbr /\u003E\n\u003Cfont size='1'\u003E\u003Ctable class='xdebug-error xe-notice' dir='ltr' border='1' cellspacing='0' cellpadding='1'\u003E\n\u003Ctr\u003E\u003Cth align='left' bgcolor='#f57900' colspan=\"5\"\u003E\u003Cspan style='background-color: #cc0000; color: #fce94f; font-size: x-large;'\u003E( ! )\u003C/span\u003E Notice: Use of undefined constant handicap - assumed 'handicap' in C:\\wamp64\\www\\MatchManagementAvail\\find_handicap.php on line \u003Ci\u003E15\u003C/i\u003E\u003C/th\u003E\u003C/tr\u003E\n\u003Ctr\u003E\u003Cth align='left' bgcolor='#e9b96e' colspan='5'\u003ECall Stack\u003C/th\u003E\u003C/tr\u003E\n\u003Ctr\u003E\u003Cth align='center' bgcolor='#eeeeec'\u003E#\u003C/th\u003E\u003Cth align='left' bgcolor='#eeeeec'\u003ETime\u003C/th\u003E\u003Cth align='left' bgcolor='#eeeeec'\u003EMemory\u003C/th\u003E\u003Cth align='left' bgcolor='#eeeeec'\u003EFunction\u003C/th\u003E\u003Cth align='left' bgcolor='#eeeeec'\u003ELocation\u003C/th\u003E\u003C/tr\u003E\n\u003Ctr\u003E\u003Ctd bgcolor='#eeeeec' align='center'\u003E1\u003C/td\u003E\u003Ctd bgcolor='#eeeeec' align='center'\u003E0.1059\u003C/td\u003E\u003Ctd bgcolor='#eeeeec' align='right'\u003E246856\u003C/td\u003E\u003Ctd bgcolor='#eeeeec'\u003E{main}(  )\u003C/td\u003E\u003Ctd title='C:\\wamp64\\www\\MatchManagementAvail\\find_handicap.php' bgcolor='#eeeeec'\u003E...\\find_handicap.php\u003Cb\u003E:\u003C/b\u003E0\u003C/td\u003E\u003C/tr\u003E\n\u003C/table\u003E\u003C/font\u003E\n\"16


Отсюда и причина, по которой я получил
"NaN"
когда я преобразовал текстовый ответ в целое число. Ввод формы для ID = HCID-это type = "Number"
Может ли кто-нибудь подсказать, что я делаю не так? Я использовал аналогичный код для другой части проекта, и он работает нормально. Сбит с толку!!!

Richard MacCutchan

Сообщение об ошибке указывает на проблему с линией:
document.getElementById(HCID).innerHTML = this.responseText;
Что, вероятно, означает, что getElementById(HCID) не возвращает ссылку. Какова ценность HCID?

Dave the Golfer

HCID определяется в контуре коммутатора. В данном случае это P1HC.
Я вставил "P1HC" на месте HCID и я получаю другое сообщение об ошибке, предполагая, что возвращаемые данные-это неправильно.
Я изменил код, чтобы
var hc = parseInt(this.responseText);
document.getElementById("P1HC").value = hc;
Теперь я получаю сообщение об ошибке ;
away12.php:81 указанное значение "NaN" не является допустимым числом. Значение должно соответствовать следующему регулярному выражению: -?(\д+|и\D+\.\д+|\.\д+)([УО][-+]?\д+)?
Элемент формы с идентификатором P1HC имеет тип="число".
Предположим, у меня есть две проблемы.

Добавлено предупреждение(HCID); для кода. В результате состояние тревоги не определено. Так что да, HCID не устанавливается в контуре переключения.
Исправленный цикл переключения забыл поместить значения регистра между "". Теперь нужно решить вторую проблему.
Спасибо за вашу помощь в решении первой проблемы.
ПРОБЛЕМА ВТОРАЯ:
Изменил код в php-файл от $фора = $db_field[фора]; на $фора = $db_field["фора"];
Правильно передаваемая ценность.

1 Ответов

Рейтинг:
12

Dave the Golfer

исправленный код.
Изменение кода скрипта;

Corrected SWITCH loop forgot to put CASE values in between "". 


Изменение кода PHP.
Changed code in PHP file from $handicap = $db_field[handicap]; to $handicap = $db_field["handicap"];


Richard MacCutchan

Теперь проблема решена?