2010-04-30 2 views
1

У меня есть следующий код.javascript ajax help

var d3_ad = 1; 

    function displayD3Ad(){ 
     var query_string = '?d3_ad='+d3_ad; 
     query_string += '&location='+escape(location); 

    //document.write('<iframe src="index.php'+query_string+'"></iframe>'); 

    var data = httpRequest('http://localhost/test/index.php','GET',query_string); 
    document.write(data); 
} 

function httpRequest(strURL,type,query) { 
    var request = false; 

    if (window.XMLHttpRequest) {// Mozilla/Safari 
     request = new XMLHttpRequest(); 
    } else if (window.ActiveXObject) { //Internet Explorer 
     request= new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    request.open(type, strURL + query, true); 
    request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
    request.onreadystatechange = function() { 
     if (request.readyState == 4) { 
      return request.responseText; 
     } 
    } 

    request.send(null); 
} 

displayD3Ad(); 

Теперь, когда он выписывает данные, это говорит о неопределенности. Кажется, что он не возвращает данные. Я посмотрел в firebug, и он завершает и показывает ответ, который будет там. Любая помощь приветствуется. Мне просто нужно установить переменную данных, чтобы впоследствии ее использовать.

+0

Каково значение заголовка Content-Type в ответе? – Andreas

ответ

2

Вы правы, в JavaScript вам придется обрабатывать значение ответа в обратном вызове. Что не подходит для серьезного применения.

Существует расширение для языка JavaScript, называемого StratifiedJS. Он запускается в каждом браузере, и он позволяет получить значение ответа напрямую (вместо неопределенного)

Вы можете включить Стратифицированный JavaScript, например. включив Они Apollo (http://onilabs.com/docs) в вашем веб-страницы, как:

<script src="http://code.onilabs.com/latest/oni-apollo.js"></script> 
<script type="text/sjs"> your StratifiedJS code here </script> 

, И ваш код будет выглядеть следующим образом:

function displayD3Ad(){ 
    var query_string = '?d3_ad='+d3_ad; 
    query_string += '&location='+escape(location); 

    var data = require("http").get('http://localhost/test/index.php' + query_string); 
    document.write(data); 
} 

Это использует инструментарий Apollo, так что вы не должны написать свой собственная функция HttpRequest, она уже существует в модуле «http».

0

Проблема в том, что вы не поняли, как этот механизм будет работать. Когда вы вызываете свою функцию httpRequest, вы делаете , инициируя транзакцию AJAX, но ваша функция возвращается почти сразу. Только после того, как сервер ответит, браузер выведет ваш обработчик изменения состояния, и это возвращаемое значение будет в основном просто отброшено. Я предлагаю, чтобы вам нужно было обработать текст ответа внутри обработчик изменения состояния.

Кроме того, он не будет работать, чтобы обрабатывать ответ с помощью document.write, потому что к моменту ответа ответа ваш документ будет выполнен. То, что вы хотите сделать, это включить в документ элемент маркера (<span> или <div> или что-то еще), а затем обработчик найдет, что в него будет отброшен текст ответа.