[ASP.NET / javascript] XMLHttpRequest is undefined

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Anoniem: 53628

Topicstarter
Of het probleem in het javascript zit of in de asp.net configuratie/code weet ik niet dus vandaar dat ik het in dit topic plaats.

Ik wil via een ASP.NET webservice tekst via javascript kunnen oproepen. Na het een en ander doorgelezen te hebben ben ik zover:

1) een ASP.net testpagina is aangemaakt
2) een webservice is aangemaakt
3) de webservice reference is aangemaakt
4) testen
5) proberen alles werkend te krijgen

Bij punt 5 loopt het spaak. En dat terwijl de de asmx pagina wel resultaat geeft:
http://www.pwiv.nl/Testpwiv.asmx

Volgens mij heb ik alles juist doorlopen maar in Firefox wordt de volgende melding gegeven:
TypeError:xmlHttp is undefined
De bijbehorende regel:
xmlHttp.open("post", "http://www.pwiv.nl/Testpwiv.asmx?op=HelloWorld", true);

Ik heb al wat variaties geprobeerd:
xmlHttp.open("post", "Testpwiv.asmx", true);
xmlHttp.open("post", "http://www.pwiv.nl/Testpwiv.asmx", true);

Doe ik iets fout of zit ik op een totaal verkeerde weg? Ik kan ook nergens uit opmaken dat het anders moet...

Resources die ik heb gebruikt:
http://lamahashim.blogspo...spnet-webmethod-from.html
http://www.w3schools.com/...asp?filename=tryajax_post
http://forums.asp.net/t/1475194.aspx/1

De code:
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>test page</title>
</head>
<script language="javascript" type="text/javascript">
   var xmlHttp;
   function CallWebService() 
   {
       //xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
       //xmlhttp=new XMLHttpRequest();
        if (window.XMLHttpRequest)
        {// code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp=new XMLHttpRequest();
        }
        else
        {// code for IE6, IE5
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
        //document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
        xmlHttp.open("post", "http://www.pwiv.nl/Testpwiv.asmx?op=HelloWorld", true);
        xmlHttp.onreadystatechange=doUpdate;
        xmlHttp.send();
        return false;
    }

   function doUpdate(){
       if (xmlHttp.readyState == 4) {
           var startTag = "<string xmlns=\"http://www.pwiv.nl\">";
           var endTag = "</string>";
           var exch;
           var valueStart = 0;
           var valueEnd = 0;
           valueStart = xmlHttp.responseXML.xml.indexOf(startTag, valueEnd) + startTag.length;
           valueEnd = xmlHttp.responseXml.xml.indexOf(endTag, valueEnd + 1);
           exch = xmlHttp.responseXML.xml.substring(valueStart, valueEnd);
           alert(exch);
       }
   }   
</script>
<body onload="CallWebService(event)">
    <form id="form1" runat="server">
    <div>
        
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
        <div id="myDiv"></div>
    </div>
    </form>
</body>
</html>



C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[WebService(Namespace = "http://www.pwiv.nl")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Testpwiv : System.Web.Services.WebService {

    public Testpwiv () {

        //Uncomment the following line if using designed components 
        //InitializeComponent(); 
    }

    [WebMethod]
    public string HelloWorld() {
        return "Hello World";
    }
    
}


Het asmx bestand bevat:
<%@ WebService Language="C#" CodeBehind="~/App_Code/Testpwiv.cs" Class="Testpwiv" %>

Acties:
  • 0 Henk 'm!

  • Rmg
  • Registratie: November 2003
  • Nu online

Rmg

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
   {
        if (window.XMLHttpRequest)
        {// code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp=new XMLHttpRequest();
        }
        else
        {// code for IE6, IE5
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        } 

.........

xmlHttp.open("post", "http://www.pwiv.nl/Testpwiv.asmx?op=HelloWorld", true);

xmlhttp=new XMLHttpRequest(); lijkt me xmlHttp=new XMLHttpRequest(); te moeten zijn

[ Voor 16% gewijzigd door Rmg op 16-03-2013 11:55 ]


Acties:
  • 0 Henk 'm!

Anoniem: 53628

Topicstarter
Dat gevaar ligt snel op de loer als je diverse bronnen gebruikt :) .

De foutmelding ben ik kwijt. Dat is al een goed iets.

Maar helaas krijg ik in mij alert/popup box geen "Hello world" terug maar de tekst "Undefined".

Er is dus nog steeds iets wat niet goed zit.

Javascript is inmiddels veranderd naar:

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<script language="javascript" type="text/javascript">
   var xmlHttp;
   function CallWebService() 
   {
       //xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
       //xmlhttp=new XMLHttpRequest();
        if (window.XMLHttpRequest)
        {// code for IE7+, Firefox, Chrome, Opera, Safari
            xmlHttp=new XMLHttpRequest();
        }
        else
        {// code for IE6, IE5
            xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
        //document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
        xmlHttp.open("post", "http://www.pwiv.nl/Testpwiv.asmx", true);
        xmlHttp.onreadystatechange=doUpdate;
        xmlHttp.send();
        return false;
    }

   function doUpdate(){
       if (xmlHttp.readyState == 4) {
           var startTag = "<string xmlns=\"http://www.pwiv.nl\">";
           var endTag = "</string>";
           var exch;
           var valueStart = 0;
           var valueEnd = 0;
           //valueStart = xmlHttp.responseXML.xml.indexOf(startTag, valueEnd) + startTag.length;
           //valueEnd = xmlHttp.responseXml.xml.indexOf(endTag, valueEnd + 1);
           exch = xmlHttp.responseXML.xml;//.substring(valueStart, valueEnd);
           alert(exch);
       }
   }   
</script>

Acties:
  • 0 Henk 'm!

  • D-Raven
  • Registratie: November 2001
  • Laatst online: 07-07 14:42
Wat je nu aan het doen bent is in SOAP communiceren met je asmx service. Aangezien je dit vanuit javascript aan het doen bent, vraag ik me af of dit nu echt is wat je wilt.

Zowieso vind ik het handmatig gebruik de Microsoft.XMLHTTP object dubieus. Er zijn zoveel manieren hoe je dat ding op een verkeerde manier kunt gebruiken, met allerlei vage browser issues e.d. Niet aan te raden iig. Als je echt SOAP wilt blijven communiceren is het wellicht handiger om ergens een javascript frameworkje te zoeken welke dit voor je doet.

Maar volgens mij wil je het liefste gewoon in JSON praten.
Dit doe je door de attribute [ScriptService] toe te voegen op je service class definitie. Op dat moment krijg je gewoon JSON terug. Nouja.. gewoon... alsnog volgens de microsoft formatter waardoor je een extra laag van indirectie in je structuur hebt zitten, maar wel geldige JSON.

Vervolgens zou je kunnen overwegen om jquery te gebruiken om de requests naar je service te maken.

Hier een blogpost welke t een en andere nog eens helder uitlegt. http://encosia.com/asmx-a...takes-and-misconceptions/

Nog even voor de duidelijkheid.

C#:
1
[System.Web.Script.Services.ScriptService] //is het attribuut


En als je asp.net 4 gebruikt hoef je verder ook geen wijzigingen in je webconfig te maken

[ Voor 8% gewijzigd door D-Raven op 16-03-2013 13:16 ]


Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Waarom maak je niet gebruik van een javascript framework zoals jQuery welke het javascript ajax gedeelte al grotendeels voor je oplost?

Als je gebruik maakt van de .get() of .load() methodes hoef je je alleen nog maar met de DoUpdate functie bezig te houden.

Honderden andere developers houden zich bezig met de jQuery bibliotheek om ervoor te zorgen dat het gedrag in de verschillende browsers met hun al quirks hetzelfde is..

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 12-07 22:24
D-Raven schreef op zaterdag 16 maart 2013 @ 13:13:
En als je asp.net 4 gebruikt hoef je verder ook geen wijzigingen in je webconfig te maken
Als je ASP.NET 4 gebruikt kun je ook ASP.NET WebAPI gebruiken. Heb je meteen een degelijke JSON serializer (JSON.NET) en ben je van de bagage van de volle WCF stack af.
Pagina: 1