Tjenare. Nu hoppas jag på ett någorlunda snbbt svar för jag har suttit med det här hela dagen (är hemma och sjuk). Jag lyckades lösa "mysteriet" til lslut.Problem med RemoteScripting.
Det är så att jag har gett mig på att försöka lite RemoteScripting, men det är inte alltid det vill funka som jag vill.
<b>test.asp</b>
<code>
<HTML>
<HEAD>
<TITLE>remote1.htm</TITLE>
<link href="../css/public.css" rel="stylesheet" type="text/css">
</HEAD>
<BODY>
<script language="JavaScript" src="../_Scriptlibrary/rs.htm"></script>
<script language="JavaScript">RSEnableRemoteScripting("../_Scriptlibrary");</script>
<form name="remote1">
Username:<input type="text" name="uName" value="">
<input name="btnGetUsername" type="button" id="btnGetUsername" value="Get username" onClick="chkUsername('getUsername', document.forms[0].uName.value);">
<input name="btnClear" type="button" id="btnClear" value="rensa statusfält" onClick="document.all['returnValue'].innerHTML = '';">
<br>
<SCRIPT LANGUAGE="javascript">
var serverURL = "remote1.asp";
function myCallBack(co)
{
document.all['returnValue'].innerHTML = co.return_value;
}
function chkUsername(uName)
{
var co = RSExecute(serverURL, uName, myCallBack);
}
</SCRIPT>
<div id="returnValue" name="returnValue"></div>
</form>
</BODY>
</HTML>
</code>
<b>remote1.asp</b>
<code>
<%@ LANGUAGE="VBSCRIPT" %>
<% RSDispatch %>
<!--#INCLUDE file="../_ScriptLibrary/rs.asp"-->
<SCRIPT RUNAT="SERVER" Language="javascript">
function Description()
{
this.getUsername = Function("uName", "return checkUserName(uName)");
}
public_description = new Description();
</script>
<%
function checkUserName(uName)
set conn=server.CreateObject("ADODB.Connection")
myconn = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" & Server.MapPath("../db/com.mdb") & ";"
conn.open myconn
strSQL = "SELECT uName FROM tblUsers WHERE uName = '" & uName & "'"
Set rstTemp = conn.Execute(strSQL)
If rstTemp.EOF Then
'checkUserName = "alert('Ledigt användarnamn'); return true;"
checkUserName = strSQL
Else
checkUserName = "alert('Användarnamnet är upptaget.\nVälj ett annat.'); document.forms[0].uName.focus(); return false;"
End If
rstTemp.Close
Set rstTemp = nothing
conn.Close
Set conn = nothing
end function
%>
</code>
Funktionen skall användas för att kontrollera om ett användarnamn är upptaget redan innan man postar formuläret, allt för att slippa ladda om sidan.
Jag har en liknande sida, som funkar fint, som ingår i registreringen där man får välja ett län och sedan fyller jag en listbox med tillhörande kommuner i det länet. Denna sida fungerar som sagt var alldeles utmärkt.
Men nu till mitt problem:
Jag får med något värde då jag anropar funktionen checkUserName(uName) om jag anropar den via RemoteScripting på test.asp. Det funkar däremot alldeles utmärkt om jag anropar den, utan javascript, på remote1.asp-sidan.
Är det någon som är insatt i detta ämne och kan hjälpa mig. Det är säkerligen något simpelt fel jag har gjort, men jag kan inte se det.
Tyvärr så finns det ingen "demo"-sida att surfa in på eftersom jag nyligen har konfigurerat upp min brandvägg ordentligt och jag orkar inte pilla upp allting på webbhotellet riktigt än (det blir lätt en massa skräpfiler kvar där då).Sv: Problem med RemoteScripting.
Anledninget vara tt jag anropade en funktion med ett värde istället för två som det är konstruerat. :-/
jag hade även ett smärre fel i javascriptet på klient-sidan när jag kollade av vilket värde som skickades tillbaka. Det var det klassiska med operatorer där jag använde = istället för == i en if-sats.
Hoppas att den här korrekta koden kan hjälpa någon i framtiden.
Nedan följer korrekta listningar för båda sidorna
<b>test.asp</b>
<code><HTML>
<HEAD>
<TITLE>remote.htm</TITLE>
<link href="../css/public.css" rel="stylesheet" type="text/css">
</HEAD>
<BODY>
<script language="JavaScript" src="../_ScriptLibrary/rs.htm"></script>
<script language="JavaScript">RSEnableRemoteScripting("../_ScriptLibrary/");</script>
<form name="frmUserRegister" method="get" action="remote.asp">
Username <input type="text" name="uName">
<input name="btnGetUsername" type="button" value="Get username" onClick="chkUsername('getUsername', document.forms[0].uName.value);">
<br>
<SCRIPT LANGUAGE="javascript">
var serverURL = "remote1.asp";
var chkUser = "";
function myCallBack(co)
{
if (co.status != -1)
{
eval(co.return_value);
}
if(chkUser == 'free')
{
alert(co.return_value);
document.forms[0].submit();
} else {
alert('Användarnamnet är upptaget.\nVälj ett annat.');
document.forms[0].uName.focus();
return false;
}
}
function chkUsername(uName, varde)
{
var co = RSExecute(serverURL, uName, varde, myCallBack);
myCallBack(co);
}
</SCRIPT>
<div id="returnValue" name="returnValue"></div>
</form>
</BODY>
</HTML></code>
<b>remote1.asp</b>
<code><%@ LANGUAGE="VBSCRIPT" %>
<% RSDispatch %>
<!--#INCLUDE file="../_ScriptLibrary/rs.asp"-->
<SCRIPT RUNAT="SERVER" Language="javascript">
function Description()
{
this.getUsername = Function("varde", "return checkUserName(varde)");
}
public_description = new Description();
</script>
<%
function checkUserName(ByVal uName)
set conn=server.CreateObject("ADODB.Connection")
myconn = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" & server.mappath("../db/com.mdb") & ";"
conn.open myconn
strSQL = "SELECT uName FROM tblUsers WHERE uName = '" & LCase(uName) & "'"
Set rstTemp = conn.Execute(strSQL)
If rstTemp.EOF Then
checkUserName = "chkUser = 'free';"
Else
checkUserName = "chkUser = 'busy';"
End If
rstTemp.Close
Set rstTemp = nothing
conn.Close
Set conn = nothing
end function
%></code>
Funktionen skall användas för att kontrollera om ett användarnamn är upptaget redan innan man postar formuläret, allt för att slippa ladda om sidan.