jquery ajax 获取返回值

jquery ajax get return value

本文关键字:返回值 获取 ajax jquery      更新时间:2023-09-26

我想获取HTML页面的"打印值"。

我尝试了下面的查询,但 showGetResult() 只返回"空值"

但是当我尝试此代码时,我的 Apache 服务器日志打印了我访问索引.php。

(索引.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>

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

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

我认为你想做的是这个。

<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>
默认情况下,

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

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

另外,不要使用document.write

根据

jQuery.ajax的文档,您有错误的dataType

"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');

你在这里错过了一个基本点。调用 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>

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

success:function(data) {
    document.write(data);
}
jQuery.ajax({
async: false, //add async false
        url: 'http://localhost/index.php',
        type: 'get',
        dataType: 'text/html',
        success:function(data)
        {
            alert(data);
            result = data;
        } 
     });