Банковский API запрошен Javascript

Я завершаю проект колледжа, и я застрял.

Я создал API в netbeans, и он отлично работает.

Возвращение, например.

<?xml version="1.0" encoding="UTF-8"?> 
   <accountholder> 
       <accountnumber>45672</accountnumber> 
       <address>234 THE BANK, DUBLIN 1</address> 
       <balance>763.32</balance> 
       <email>[email protected]</email> 
       <firstname>JOHANN</firstname> 
       <id>1</id> 
       <lastname>SMITH</lastname> 
       <pinnumber>1234</pinnumber> 
   </accountholder>

Теперь я пытаюсь создать javascript для возврата данных при поиске по идентификатору.

<script language="javascript" type="text/javascript">
var request = null;

function createRequest() {
try {
request = new XMLHttpRequest();
} catch (trymicrosoft) {
try {
request = new ActiveXObject("MsXML2.XMLHTTP");
} catch (othermicrosoft) {
try {
request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (failed) {
request = null;
}
}
}

if (request == null)
alert("Error creating request object!");
}
function getMessage()
{
createRequest();
var accountholderid = document.getElementById("Id").value;
id=eval(accountholderid);
var url = "http://localhost:8080/BankProjectApi/webresources/bankprojectapi.accountholder/"+id;
request.onreadystatechange = handleResponse;
request.open("GET", url, true);
request.send(null);
}
function handleResponse() {
if (request.readyState==4 && request.status==200)
{ 
var xmlDocument=request.responseXML;
var firstname = xmlDocument.getElementsByTagName("firstname");
var lastname = xmlDocument.getElementsByTagName("lastname");
var accountnumber = xmlDocument.getElementsByTagName("accountnumber");

for(var i=0; i<firstname.length; i++) {
var firstname = firstname[i].childNodes[0].nodeValue;
var lastname = lastname[i].childNodes[0].nodeValue;
var accountnumber= accountnumber[i].childNodes[0].nodeValue;
document.getElementById('lastname').value=firstname;
document.getElementById('firstname').value=lastname;
document.getElementById('accountnumber').value=accountnumber;
}
}

}
</script>

В теле у меня есть текстовое поле ввода с кнопкой с щелчком мыши:

<td>Enter Account holder ID : </td>
<td><input type="text" id="playerid" size="10"/>

<input type="button" value="Get Details" onclick="getMessage()"/>
</tr>
<tr>
<td>Account holder Last Name : </td>
<td> <input type="text" id="lastname" size="10"/> </td>
</tr>

<tr>
<td>Account holder First Name : </td>
<td> <input type="text" id="firstname" size="10"/> </td>
</tr>

<tr>
<td>Account number : </td>
<td> <input type="text" id="accountnumber" size="10"/> </td>
</tr>

Что мне не хватает, поскольку он ничего не возвращает :(


person user2110655    schedule 24.04.2013    source источник


Ответы (1)


Я полагаю, что ваше значение идентификатора для «accountholderid» искало «Id» вместо «playerid».

Могу я спросить, почему вы называете значение «eval»? Вам нужен parseInt?

(function () {

var request = null;

function createRequest() {
    try {
        request = new XMLHttpRequest();
    } catch (trymicrosoft) {
        try {
            request = new ActiveXObject('MsXML2.XMLHTTP');
        } catch (othermicrosoft) {
            try {
                request = new ActiveXObject('Microsoft.XMLHTTP');
            } catch (failed) {
                request = null;
            }
        }
    }

    if (request === null) {
        alert('Error creating request object!');
    }
}

function getMessage() {
    createRequest();

    var accountholderid = document.getElementById('playerid').value,
        id = eval(accountholderid),
        url = 'http://localhost:8080/BankProjectApi/webresources/bankprojectapi.accountholder/' + id;

    request.onreadystatechange = handleResponse;
    request.open("GET", url, true);
    request.send(null);
}

function handleResponse() {
    if (request.readyState === 4 && request.status === 200) { 
        var xmlDocument = request.responseXML,
            firstname = xmlDocument.getElementsByTagName('firstname'),
            lastname = xmlDocument.getElementsByTagName('lastname'),
            accountnumber = xmlDocument.getElementsByTagName('accountnumber');

        for(var i = 0, max = firstname.length; i < max; i += 1) {
            var firstname = firstname[i].childNodes[0].nodeValue,
                lastname = lastname[i].childNodes[0].nodeValue,
                accountnumber = accountnumber[i].childNodes[0].nodeValue;

            document.getElementById('lastname').value = firstname;
            document.getElementById('firstname').value = lastname;
            document.getElementById('accountnumber').value = accountnumber;
        }
    }

}

}());

Кроме того, я провел быстрый рефакторинг вашего кода, чтобы помочь мне оценить проблему, придерживаться большего количества соглашений сообщества, а также избежать распространенных ловушек JS. (например, закрытие, отсутствующие объявления var, ===, curlys везде, шаблон с одной переменной и некоторые другие).

person wintondeshong    schedule 24.04.2013
comment
Привет Wintondeshong Player ID взят из учебника Oracle, который я использовал. Я изменил некоторые вещи, чтобы они соответствовали моему банковскому проекту, и вместо этого использовал Id. Должно быть, где-то пропустил? Но я не думаю, что использую playerId - person user2110655; 25.04.2013
comment
Винтондешонг, я бы хотел поставить тебе +1, ты гений! Это сработало - person user2110655; 25.04.2013
comment
Вы также можете рассмотреть цикл cl.ly/image/2U2s3i0w1q1P, поскольку он перезаписывает ваши локальные переменные. Я оставлю это вам, хотя ;) - person wintondeshong; 25.04.2013