2012-04-17 4 views
3

Я хочу получить «печатное значение» html-страниц.jquery ajax get return value

я пытался ниже запроса, но showGetResult() просто возвращает «нулевое значение»

но мои журналы сервера Apache печататься я доступен index.php, когда я пытаюсь этот код.

(index.php только для печати HelloWorld)

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"><\script> 
<script type="text/javascript"> 
function showGetResult(name) 
{ 
    var result = null; 
    jQuery.ajax({ 
     url: 'http://localhost/index.php', 
     type: 'get', 
     dataType: 'text/html', 
     success:function(data) 
     { 
      alert(data); 
      result = data; 
     } 
    }); 
    return result; 
} 

document.write(showGetResult('test')); 
</script> 

ответ

3

Я думаю, что вы хотите это сделать.

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"><\script> 
<script type="text/javascript"> 
function showGetResult(name) 
{ 
    jQuery.ajax({ 
     url: 'http://localhost/index.php', 
     type: 'get', 
     dataType: 'text/html', 
     success:function(data) 
     { 
      alert(data); 
      document.write(data); 
     } 
    }); 
} 

showGetResult('test'); 
</script> 
0

AJAX запросы aynchronous по умолчанию; вы не можете вернуть их результат в функцию, вам нужно использовать обратные вызовы. Самый простой способ добиться того, что вы хотите поместить ваш код, который обрабатывает данные в вашем success обработчика:

success:function(data) 
    { 
     alert(data); 
     result = data; 
     document.write(showGetResult('test')); 
    } 

Кроме того, не используйте document.write.

5

Так работает AJAX (асинхронно, как следует из названия). Функция showGetResult возвращается до завершения вызова AJAX. showGetResult поэтому просто вернет null, так как вы назначили result.

Переместить любой код, который зависит от результата вызова AJAX внутри обратного вызова success. В качестве альтернативы вы можете сделать синхронный вызов, но обычно это не то, что вы хотите.

0

Вы ошиблись dataType за документацию для jQuery.ajax:

"HTML": Возвращает HTML как простой текст; включенные теги скриптов оцениваются при вставке в DOM.

Так что вы хотите использовать html:

... 
dataType: 'html', 
... 


Кроме того, как уже говорили другие, запрос Ajax является асинхронной. Поэтому вам нужно перестроить свой код. Например:

function showGetResult(name) 
{ 
var result = null; 
jQuery.ajax({ 
    url: 'http://localhost/index.php', 
    type: 'get', 
    dataType: 'html', 
    success:function(data) 
    { 
     alert(data); 
     result = data; 
     document.write(result); 
    } 
}); 
} 

showGetResult('test'); 
0

Вам не хватает фундаментальной точки здесь. Метод success не запускается при вызове showGetResult. Он запускается asynchronously.

В момент, когда вы положили return result;, он по-прежнему равен нулю (поскольку success еще не был вызван).

Что вам нужно сделать, так это выполнить команду document.write после успешного выполнения.Либо так:

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"><\script> 
<script type="text/javascript"> 
function showGetResult(name) 
{ 
    var result = null; 
    jQuery.ajax({ 
     url: 'http://localhost/index.php', 
     type: 'get', 
     dataType: 'text/html', 
     success:function(data) 
     { 
      alert(data); 
      document.write(data); 
     } 
    }); 
    return result; 
} 

//document.write(showGetResult('test')); 
showGetResult('test'); 
</script> 

Или с обратным вызовом:

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"><\script> 
<script type="text/javascript"> 
function showGetResult(name) 
{ 
    var result = null; 
    jQuery.ajax({ 
     url: 'http://localhost/index.php', 
     type: 'get', 
     dataType: 'text/html', 
     success:function(data) 
     { 
      alert(data); 
      writeToDocument(data); 
     } 
    }); 
} 

function writeToDocument(data) { 
    document.write(data); 
} 

showGetResult('test'); 
</script> 
0

Вместо того чтобы использовать document.write на то, что вы ожидаете, что функция вернёт, то обратный вызов может позаботиться о том, что для вас, например, так:

success:function(data) { 
    document.write(data); 
}