1

I think I have a very simple question, but I couldn't find a solution. So what I want is to load a DIV content via HTML. The problem is that it is not just a text, but also an image. The ajax call returns the HTML code, but this is displayed in the DIV as HTML and is not executed. Difficult to explain, but obvious from the example... The AJAX call returns the string:

<img src="/images/weather/1.png" width="80px"><br>3.3 °C

The problem is obvious. Instead of an image and the 3.3°C in the div, I get the actual code, so instead of the image I see img src=....

I know that i need to somehow decode the HTML, but I have no clue how to do this and would very much appreciate any help.

My Javascript code is:

var xmlhttp;
if (window.XMLHttpRequest) {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp = new XMLHttpRequest();
} else {
    // code for IE6, IE5
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function () {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        newtext = xmlhttp.responseText;
    }
}
xmlhttp.open("GET", "message_ajax.php", true);
xmlhttp.send();
$('#text').fadeOut(function () {
    $(this).text(newtext).fadeIn();
})
kapa
  • 77,694
  • 21
  • 158
  • 175
Jachym
  • 485
  • 9
  • 21
  • How could we help without seeing your Javascript code? The part when you insert the returned to string to the DOM. – kapa Feb 11 '14 at 23:36
  • var xmlhttp; if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { newtext = xmlhttp.responseText; } } xmlhttp.open("GET","message_ajax.php",true); xmlhttp.send(); $('#text').fadeOut(function(){ $(this).text(newtext).fadeIn(); }) } – Jachym Feb 11 '14 at 23:37
  • Use `edit` under your question and paste the code there - will be much more readable :). – kapa Feb 11 '14 at 23:39

3 Answers3

8

Are you looking for something like this ? https://api.jquery.com/load/

Where you can just load HTML into a DIV using ajax. Seems to be what you're asking...

$( "#result" ).load( "ajax/test.html" );

Where your ajax/test.html file contains

<img src="/images/weather/1.png" width="80px">

Edited... to be more specific. This is using jQuery.

danski
  • 353
  • 3
  • 12
  • I have not seen jQuery mentioned in the question... and it is absolutely not needed to solve this problem. – kapa Feb 11 '14 at 23:42
  • 1
    Down vote ? Pretty sure that is exactly what the question is asking. Care to elaborate on why that is not "Loading DIV content via ajax as HTML" ? – danski Feb 11 '14 at 23:42
  • 3
    What's wrong with using jQuery ? Many ways to skin a cat. This is just an easy solution to an easy problem. – danski Feb 11 '14 at 23:43
  • Removed my downvote because of the code posted in the comments reveals that OP is actually using jQuery. I normally downvote when a jQuery solution is posted when the question does not mention jQuery and it is not necessary to solve the problem. – kapa Feb 11 '14 at 23:47
2

You should use $(this).html(newtext) instead of $(this).text(newtext).

They are quite different. .text() will "escape" your HTML and insert it as simply text. Or as the documentation states:

We need to be aware that this method escapes the string provided as necessary so that it will render correctly in HTML. To do so, it calls the DOM method .createTextNode(), does not interpret the string as HTML.

You should always read the documentation first.


If you are already using jQuery, you could use it's AJAX methods which make your life much easier.

kapa
  • 77,694
  • 21
  • 158
  • 175
0
document.getElementById("divId").innerHTML = "<img ..........";    

OR

$("#divId").html("<img ..........");
kapa
  • 77,694
  • 21
  • 158
  • 175
Ali Adravi
  • 21,707
  • 9
  • 87
  • 85