Как прочитать возврат из 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["фора"];
Правильно передаваемая ценность.