3

HTMLページの「印刷された値」を取得したい。

以下のクエリを試しましたが、showGetResult()は「null値」を返します

しかし、このコードを試してみると、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ので、単に戻ります。nullresult

AJAX呼び出しの結果に依存するコードをsuccessコールバック内に移動します。または、呼び出しを同期させることもできますが、それは通常、必要なことではありません。

于 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

ここで基本的なポイントが欠けています。successshowGetResultを呼び出すと、メソッドは実行されません。非同期で実行されます。

あなたが置いた時点return result;ではまだnullです(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

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

関数が返すと期待するものを使用するのではなく、document.write次のように、成功のコールバックがそれを処理できます。

success:function(data) {
    document.write(data);
}
于 2012-04-17T16:02:01.283 に答える