jquery ajax获取返回值

时间:2012-04-17 15:55:28

标签: javascript jquery ajax

我想获得html网页的'打印价值'。

我尝试了以下查询,但showGetResult()只返回'null value'

但我的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>

7 个答案:

答案 0 :(得分:5)

这是AJAX的工作方式(异步,如名称所示)。 {AJ}调用完成之前,showGetResult函数返回。因此,showGetResult只会返回null,因为这是您分配给result的内容。

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

答案 1 :(得分: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>

答案 2 :(得分:0)

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

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

另外,请勿使用document.write

答案 3 :(得分:0)

根据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');

答案 4 :(得分:0)

你在这里错过了一个基本点。调用showGetResult时,不会运行success方法。它运行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>

答案 5 :(得分:0)

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

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

答案 6 :(得分: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;
        } 
     });