3

我想获得 html 页面的“打印值”。

我尝试了以下查询,但 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>
4

7 回答 7

5

这就是 AJAX 的工作方式(异步,顾名思义)。该showGetResult函数在 AJAX 调用完成之前返回。showGetResult因此将简单地返回null,因为这是您分配给result.

success在回调中移动任何依赖于 AJAX 调用结果的代码。或者,您可以使调用同步,但这通常不是您想要的。

于 2012-04-17T15:58:07.613 回答
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>
于 2012-04-17T16:00:32.780 回答
0

AJAX 请求默认是异步的;你不能在函数中返回他们的结果,你需要使用回调。实现您想要的最简单的方法是将处理数据的代码放在success处理程序中:

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

另外,不要使用document.write.

于 2012-04-17T15:57:53.370 回答
0

根据jQuery.ajaxdataType的文档,您有错误:

“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');
于 2012-04-17T15:58:41.327 回答
0

你在这里错过了一个基本点。当您调用 showGetResult 时,该success方法不会运行。它是异步运行的。

在你说它的时候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>
于 2012-04-17T16:01:31.033 回答
0

成功回调可以为您处理好这些,而不是使用document.write您期望函数返回的内容,如下所示:

success:function(data) {
    document.write(data);
}
于 2012-04-17T16:02:01.283 回答
0
jQuery.ajax({
async: false, //add async false
        url: 'http://localhost/index.php',
        type: 'get',
        dataType: 'text/html',
        success:function(data)
        {
            alert(data);
            result = data;
        } 
     });
于 2019-11-29T03:49:08.390 回答