» »

[Ajax in Java] v IE6 dela, v Firefoxu ne

[Ajax in Java] v IE6 dela, v Firefoxu ne

Fizikalko ::

Torej, delam eno formo v jsp-ju in pač bi rad naredil en enostaven autocomplete. V IE dela super, v FF pa se ne zgodi nič. kakšna ideja?

Aja, valda mam kreiranje request objekta ločeno za FF in IE posebej (XmlHttpRequest in ActiveObject...).
  • spremenilo: snow ()

[MYTiX] ::

Sicer jsp ne poznam, ampak mislim, da je tukaj napaka na frontendu, torej v JavaScriptu.
Uporabi Firebug extension za FF, ki je zelo uporaben za debugiranje javascripta.
Si pa dal premalo informacij, da bi lahko kaj bolj natančnega sklepal (js koda?).
podpis

xeon ::

to ti je pa microsoftova tehnologija...

Fizikalko ::

Koda je taka (čist simpl):

var req;
function getCity(){
var key = document.getElementById("textfield");
var url = "../ajaxOFFresponse?key="+ escape(key.value);
if (window.XMLHttpRequest){
req = new XMLHttpRequest();
}
else if (window.ActiveXObject){
req = new ActiveXObject("Microsoft.XMLHTTP");
}
req.open("Get",url,true);
req.onreadystatechange = callback;
req.send(null);
}

function callback(){
if (req.readyState==4){
if (req.status == 200){
var textback = document.getElementById('textfield');
textback.value = req.responseText;
}
}
}
function focusIn(){
document.getElementById("textfield").focus();
}

Fizikalko ::

Servlet pa po logiki takle:

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class AjaxResponseServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {

String key = req.getParameter("key");
if (key != null && key.equalsIgnoreCase("L") ) {
// extract the first character from key
// setup the response
key = "LJU";
}
res.setContentType("text/xml");
res.setHeader("Cache-Control", "no-cache");
// write out the response string
res.getWriter().write(key);

}
}

xeon ::

to delaš v visual web developer?

Fizikalko ::

Ne, v RAD-u (IBM Rational Application Developer, java server je torej Websphere, ampak to najbrž nima veze).

Fizikalko ::

Zanimivo je to, da mi en podoben primerček dela povsod. Razlika je le ta, da gre tule za skripto, ki je v oknu, do katerega se pride po par korakih preko https.

[MYTiX] ::

Nisem opazu nobene napake, ne v js, ne v java kodi. A lahko ugotoviš če se v firefoxu sploh sproži request?
podpis

Fizikalko ::

Mater, v servletu sem naštimal breakpoint, pa sploh noter ne preide (v servlet). pri IE se seveda pride noter, a se na breakpointu ustavi. Torej je problem, da sploh ne pokliče servleta... Kakšna ideja?

ender ::

Poizkusi namesto req.send(null); uporabiti req.send(''); - se mi zdi, da sem imel isti problem s Firefoxom (med tem, ko je v Operi delalo).
There are only two hard things in Computer Science:
cache invalidation, naming things and off-by-one errors.

Fizikalko ::

Hvala za predlog, žal ne pomaga... :'(

Zgodovina sprememb…

[MYTiX] ::

Poskusi z Firebugom postaviti breakpointe v js. Boš hitro ugotovil kje je napaka.
podpis

Fizikalko ::

Hja, zadnja vrstica, do katere pride,je tale:

var url = "../ajaxOFFresponse?key="+ escape(key.value);

Če dam breakpoint v naslednji, namreč do nje sploh ne pride (več).

Kaj je narobe? key.value? Bi moral definirat key.value posebej, ne pa da sem kar takole naredil:

var key = document.getElementById("textfield");

[MYTiX] ::

To kar si ti napisal, bi vsekakor moralo delovat. A imaš še kak JS na isti strani?
podpis

Fizikalko ::

ja...

Fizikalko ::

var busy = false;
function submitSearch(form)
{
//set the result catEntryType, which is checked on CatalogSearchResultDisplay.jsp:
// 1 = list items, packages, and bundles
// 2 = list products, packages, and bundles

if (!busy)
{
busy = true;

form.searchTerm.value = form.searchTerm.value.replace(/^\s+/g, '').replace(/\s+$/g, '');

form.minPrice.value = form.minPrice.value.replace(/^\s+/g, '').replace(/\s+$/g, '');
form.maxPrice.value = form.maxPrice.value.replace(/^\s+/g, '').replace(/\s+$/g, '');


if ((form.minPrice.value == "") && (form.maxPrice.value == ""))
{
form.resultCatEntryType.value = "2";
form.currency.value="";
}
else
{
form.resultCatEntryType.value = "1";
}

form.submit();
}
}

Fizikalko ::

Samo ne razumem, kaj ima druga skripta veze. Aplikacija mi itak dela, le ajax efekta ni (autocomplete-a).

Fizikalko ::

OK, po malo daljšem trejsanju sem ugotovil, da je problem vsaj tule, če ne še kje:

document.getElementById("textfield")

namre, to ne vrne ničesar, zato je "key" polje prazno. Kdo ve, zakaj? V IE se polje lepo napolni...

[MYTiX] ::

Sicer banalno vprašanje :). A ima html element id field(id="textfield")?
podpis

Fizikalko ::

Ja, itak.

No, polje je v glavnem "undefined". A mogoče v FF ta metoda (getElementByID) ne dela?

Sergio ::

Dela dela.

Firebug say na Slo-Techu:

>>> document.getElementById("anketa_id_2098")
input id="anketa_id_2098" class="anketa" type="radio" value="2098" name="izbira"

Poglej ce se nisi v IDju elementa zatipkal. Poglej tudi velike-male crke. Stvar bi ziher morala delat.
Tako grem jaz, tako gre vsak, kdor čuti cilj v daljavi:
če usoda ustavi mu korak,
on se ji zoperstavi.

Fizikalko ::

MATER! Bemo! Jebenti! Pismo, no!!! ;((

Pozabu sem en klinčev narekovaj v id atributu (html). IE to očitno tolerira, FF pa ne. AAARRGGGH!!!

Vseeno vsem najlepša hvala! Sej v bistvu breu vas niti najdu ne bi, ker sem bil zihr, da je ok, pa sem vseeno na nagovarjanje obeh še enkrat pogledal.

Aja, pri trejsanju sem opazil, da se včasih zgodi, da readystate vrne 1 namesto 4. Zakaj?

Zgodovina sprememb…

Sergio ::

Fizikalko: Firebug je tvoj prijatelj. Ce pride do napake, ti to zelo lepo pokaze s tistim rdecim klicajem. Lahko vkljucis tudi break on error, in bos mel trap okol napake.

Glede readystate pa ne vem tocno, v Javascriptu sem bolj nov.
Tako grem jaz, tako gre vsak, kdor čuti cilj v daljavi:
če usoda ustavi mu korak,
on se ji zoperstavi.

krho ::

0 Uninitialized - open() has not been called yet.
1 Loading - send() has not been called yet.
2 Loaded - send() has been called, headers and status are available.
3 Interactive - Downloading, responseText holds the partial data.
4 Completed - Finished with all operations.
si.Mail odprto-kodni odjemalec elektronske pošte. - http://www.simail.si
Uredite si svojo zbirko filmov, serij in iger - http://xcollect.sf.net


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Jquery

Oddelek: Izdelava spletišč
151798 (1522) mk818764
»

[ajax] osnove

Oddelek: Programiranje
61060 (904) Volk|
»

[PHP/JavaScript] tic tac toe

Oddelek: Programiranje
171662 (1395) illion
»

Javascript - izračun razlike v datumih

Oddelek: Programiranje
81908 (1763) kogledom
»

tomcat - problem z encodingom

Oddelek: Programiranje
72343 (2257) kopernik

Več podobnih tem