views:

1290

answers:

4

I have this code:

function render_message(id)
{
var xmlHttp;
  xmlHttp=new XMLHttpRequest();  
  xmlHttp.onreadystatechange=function()
    {
    if(xmlHttp.readyState==4)
      {
     document.getElementById('message').innerHTML=xmlHttp.responseText;
     document.getElementById('message').style.display='';
     }
    }
    var url="include/javascript/message.php";
    url=url+"?q="+id;
  xmlHttp.open("GET",url,true);
  xmlHttp.send(null);
}

For some reason it does not work in IE and an error is being reported on this line "document.getElementById('message').innerHTML=xmlHttp.responseText;" with an "Unknown Runtime Error".

Can anyone help?

Edit: The code being added to the div is valid code ect.

Here is the response:

<div style="margin-left:auto;margin-right:auto;width:400px;">
    <img src="/forum/img/avatars/2.gif" width="90" height="89" style="float:left;">
    <div style="margin-left:100px;">
     <span style="font-size:16pt;">Sam152</a></span><br>
     <span style="font-size:10pt;text-transform:uppercase;font-weight:bold;">From Sam152</span><br>
     <span style="font-size:10pt;font-weight:bold;">Recieved April 17, 2009, 9:44 am</span><br>
     <br><br>

    </div>
</div>
<div style="margin-left:auto;margin-right:auto;width:400px;">
     asd</div>
<div style="margin-left:auto;margin-right:auto;width:400px;text-align:right;padding-top:10px;">
     <span onClick="requestPage('http://www.gametard.com/include/scripts/delete_message.php?id=14');document.getElementById('message14').style.display='none';document.getElementById('message').style.display='none';" class="button">Delete</span>
     <span onClick="document.getElementById('message').style.display='none';" class="button">Close</span>
     <span onClick="document.getElementById('to').value ='Sam152';document.getElementById('to').style.color ='#000';document.getElementById('newmessage').style.display='';" class="button">Reply</span>  

</div>
+2  A: 

Your issue.

Essentially, you are trying to add HTML that doesn't make sense in the context you're adding it. Adding li's where there is no ul, or rows where there is no table can cause this sort of thing.

altCognito
The HTML makes perfect sense, its a div nested in a div.
Sam152
@Sam152: the answer is referring to the element with id "message", not the response body itself.
JPot
+1  A: 

You can get this error if the result would be invalid HTML - for example <a><a>foo</a></a> or <a><p>foo</p></a>.

Without seeing more of the code (what type of element "message" is and what responseText is) it's hard to say more.

Your code isn't valid:

<span style="font-size:16pt;">Sam152</a></span>
                                    ^^^^
Greg
I have combed over the HTML and found nothing that could be causing it.
Sam152
+4  A: 

Not sure if the following applies to you as you don't mention what version of ie you are using.

works only in ie7 upwards

var xmlhttp=new XMLHttpRequest();

In Internet Explorer 5 and 6 you must use

var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
Paul Whelan
Oh, and bear in mind that new ActiveXObject("Microsoft.XMLHTTP") doesn't always work with SSL (especially in IE5) so should be avoided for secure applications.
Keith
+2  A: 

Trust me on this: use an Ajax framework.

jQuery or prototype or any of the others.

Don't roll your own - you're only seeing the tip of the cross-browser iceberg with this issue.

If you must do it yourself check xmlHttp.status before getting your message. Bear in mind that IE sometimes returns Windows error codes instead of HTTP status here, and older FX throws an exception if the error is a lost connection rather than a HTTP status.

Oh, and IE6 is still about 30% of the web market and 60% of the corporate one, so @Paul Whelan's advice is worth checking too.

Keith
Good advice, I get what your saying. This is only for a small app though and this is the end of my AJAX programming for now. How would I implement your xmlHttp.status suggestion?
Sam152
Google hosts jQuery, making it very easy to use for small apps - I'd use just their one. Otherwise put a try-catch around getting xmlHttp.status and then handle anything other than 200 or a thrown exception. Any status over 505 (in IE) is a Windows connection error rather than a server one: for instance 12002 is a connection timeout.
Keith
I am a novice Javascript programmer, would this fix the error and would you show it to me in my exsisting function?
Sam152
IE6 is actually down under 20% now. Not to argue with your post, just a little factoid that makes me happy on the inside.
tj111
Keith
@tj111 - it's like some beautiful dream, but it's not like IE7 is much better, it's just slightly less awful. IE8 appears to still be slower than every other browser. And unfortunately the corp market is still mostly IE6 because they have legacy 'enterprise' IE6-only applications that they'd have to upgrade at the same time.
Keith
@Keith: Gee whizzers, that's crazy. I guess jQuery is the way to go then.
Sam152