Mój kod JavaScript prezentuje się w ten sposób:
function DoCheck()
{
document.getElementById("message").innerHTML = '';
advAJAX.assign(document.getElementById("form1"), {
parameters:
{
"opfAjax": "1"
},
onLoading: function(obj)
{
var el = document.getElementById("message");
var m = document.createElement('p');
el.style.display = 'block';
var text = document.createTextNode('Trwa dodawanie informacji...');
m.appendChild(text);
el.appendChild(m);
},
onComplete: function(obj)
{
document.getElementById("message").style.display = 'none';
},
onSuccess: function(obj)
{
var xmlDoc = obj.responseXML;
// debug
alert(obj.responseText);
var opfResult = xmlDoc.getElementsByTagName('opfResult');
if(opfResult.length > 0)
{
for(var i = 0; i < opfResult.length; i++)
{
// debug
alert(opfResult.item(0));
}
if(opfResult.item(0).nodeValue == 1)
{
createMessage("message", 'Dobrze');
}
else
{
createMessage("message", 'Zle: '+opfResult.length);
}
}
else
{
createMessage("message", 'Nieprawidlowe zrodlo! '+opfResult.length);
}
},
onError: function(obj)
{
createMessage("message", "Wystapil blad podczas pobierania.");
}
});
}
function createMessage(id, content)
{
var el = document.getElementById(id);
// Usun stare te te.
resetChildren(el);
var m = document.createElement('p');
el.style.display = 'block';
m.appendChild(document.createTextNode(content));
el.appendChild(m);
} // end createMessage();
function resetChildren(node)
{
var i = 0;
for(i = 0; i < node.childNodes.length; i++)
{
node.removeChild(node.childNodes.item(i));
}
} // end resetChildren();OPF, w przypadku prawidłowego wypełnienia formularza, generuje na razie prostą odpowiedź:
<opfResponse> <opfResult>1</opfResult> </opfResponse>
Dla błędnych danych jest ona dłuższa, gdyż zawiera wynik kontroli każdego z pól oraz ewentualne dane kontrolne. Podejrzewając, że być może problem leży w nagłówkach (notabene ustawionych), zrobiłem na szybko plik noopf.php:
<?php header('Content-type: application/xml;charset=iso-8859-2'); echo '<'.'?xml version="1.0" encoding="iso-8859-2"?'.'>'; ?> <opfResponse> <opfResult>1</opfResult> </opfResponse>
Oczywiście przekierowanie odpowiedzi na niego także nic nie dało - formularz w najlepsze wyświetlał sobie "Źle: 1" oraz informacje, że na liście opfResult mam obiekty HTMLElement, w których nodeValue jest ustawione na wartość null. To oznacza, że PHP nie ma z tym raczej nic wspólnego i coś jest źle albo w moim kodzie, albo w advAjax. Co - nie jestem w stanie powiedzieć, niemniej wypadałoby to odkryć jak najszybciej.
Skoro już jesteśmy przy temacie AJAX oraz OPF, wymienię może tryby, w jakich te technologie będą mogły ze sobą współpracować:
- Pełna kontrola z raportem - jeśli dane są poprawne, OPF wysyła też wpisane wartości, aby kod JavaScript mógł jakiś raport utworzyć.
- Pełna kontrola bez raportu - jeśli dane są poprawne, wysyłana jest skrótowa informacja, jak powyżej, że wszystko jest OK.
- Kontrola wybiórcza - można zlecić sprawdzenie jednego, wybranego pola lub grupy pól.
- Kontrola niskopoziomowa - OPF wykonuje kontrolę, ale wysłaniem odpowiedzi musi zająć się już programista (jeżeli chce wysłać niestandardowe dane).
Formularze będą mogły pracować bez żadnych modyfikacji także wtedy, gdy AJAX jest niedostępny.














