När man skriver i textboxen så skall aspx returnera HELLO i en div. Men ingen text med HELLO dyker upp. Inte heller så kan man se i webläsaren adress fält att något händer... Vad är fel? För det första tror jag inte scriptet funkar i Firefox, det kanske är en förklaring. Jo det är sant ... men innan jag sätter igång vill jag förstå de enkla grunderna.Varför fungerar inte min enkla AJAX lösning ?
Hittade codeproject.com en liten kod för att starta med Ajax. Den innehöll igenligen en databaskoppling i aspx-delen som jag bytte bort mot lite testtext.
<code>
<html>
<head>
<script>
var req;
function Initialize()
{
try
{
req=new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
try
{
req=new ActiveXObject("Microsoft.XMLHTTP");
}
catch(oc)
{
req=null;
}
}
if(!req&&typeof XMLHttpRequest!="undefined")
{
req= new
XMLHttpRequest();
}
}
function SendQuery(key)
{
Initialize(); var url="***min server ****/dict.aspx?k="+key; ***HÄR VAR FELET SATTE IHOPVAR OCH URL
if(req!=null)
{
req.onreadystatechange = Process;
req.open("GET", url, true);
req.send(null);
}
}
function Process()
{
if (req.readyState == 4)
{
// only if "OK"
if (req.status == 200)
{
if(req.responseText=="")
HideDiv("autocomplete");
else
{
ShowDiv("autocomplete");
document.getElementById("autocomplete").innerHTML =req.responseText;
}
}
else
{
document.getElementById("autocomplete").innerHTML=
"There was a problem retrieving data:<br>"+req.statusText;
}
}
}
function ShowDiv(divid)
{
if (document.layers) document.layers[divid].visibility="show";
else document.getElementById(divid).style.visibility="visible";
}
function HideDiv(divid)
{
if (document.layers) document.layers[divid].visibility="hide";
else document.getElementById(divid).style.visibility="hidden";
}
function BodyLoad()
{
HideDiv("autocomplete");
document.form1.keyword.focus();
}
</script>
</head>
<body onload="BodyLoad();">
<form name="form1">
<input name="keyword" onKeyUp="SendQuery(this.value)" style="WIDTH:500px" autocomplete="off">
<div align="left" class="box" id="autocomplete" style="WIDTH:500px;BACKGROUND-COLOR:#ccccff"></div>
</form>
</body>
</html>
</code>
<code>
<%@Page Language="C#"%>
<%@Import Namespace="System.Data"%>
<%@Import Namespace="System.Data.SqlClient"%>
<%@Import Namespace="System.Configuration"%>
<script runat="server">
public void Page_Load(object sender,EventArgs args)
{
string keyword=Request["k"];
if(keyword!=null && keyword.Trim()!="")
{
Response.Write("<strong>HELLO</strong><br>");
}
}
</script>
</code>Sv: Varför fungerar inte min enkla AJAX lösning ?
För det andra är felhanteringen horribel, du ser ju aldrig vad som går snett när try/catch används på detta sätt, utan någon som helst koll på vad som gick snett :)
Testa
alert(e.toString());
i catch-blocket till att börja med.
Det är en bra idé att använda ett ramverk för Ajax som hjälper dig att hantera just sådana problem som att XML-objekten heter olika i MSIE vs. Firefox.
http://en.wikipedia.org/wiki/List_of_web_application_frameworks#JavaScript
http://asp.net/ajax/Sv:Varför fungerar inte min enkla AJAX lösning ?