0

重複の可能性:
AJAX応答テキストを返す方法は?

getJsonObject関数に少し問題があります。コードに実行させたいのは、[次へ]をクリックするたびに、getJsonObject関数が記事の次のページを取得し、domの準備ができたら、記事の見出しを表示することです。ただし、エラーが発生した場合(ページが不足した場合など)、pageNrはそれ以上インクリメントされません。問題は、alert('return is 0)'が表示されても、getJsonObject関数が0を返さないことです。

これが私のコードです:

<html>
    <head>
        <title>World News</title>
        <link rel="stylesheet" type="text/css" href="css/fullWindow.css" />
        <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
        <script src="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.9/jquery-ui.js" type="text/javascript"></script>
        <script src = "https://raw.github.com/janl/mustache.js/master/mustache.js" type = "text/javascript"></script>
    <body>      
        <section id="mainContent">          
            <div class="prevNext floatRight"><a id="prev" href="#">prev</a> | <a id="next" href="#">next</a></div>
            <section id="news">
                <p id="headline">This is my headline for the moment.</p>

            </section>
        </section>              


    <script type="text/javascript">
        $(document).ready(function(){
            var pageNr = 1;
            var sectionName = "science";
            var err = '2';

            $("#next").click(function(){

                /* it removes the tag 'p' with id="headline" and inserts some other content */
                $.when($('#headline').remove()).then(function(){                            
                    err = getJsonObject(sectionName, pageNr+1);
                    alert('err: '+err);

                    /* if there is no error go to the next page */
                    if(err == '0'){
                        pageNr++;                   
                    }
                });
            });
        });
        function getJsonObject(sectionName, pageNr){        

            $.getJSON('http://content.guardianapis.com/search?q=' + sectionName +      '&page=' + pageNr + '&page-size=5&order-by=relevance&format=json&show-fields=all&date-  id=date%2Flast7days&api-key=gd6ndfndjyr8sd2p3rq3ubkg&callback=?', 
            function(data){                 
                var results;    

                /* I get status == error when I finish iterating the pages*/    
                if(data.response.status != 'error'){            

                    $('#news').append('<p id="headline">'+data.response.results[pageNr].fields.headline+'</p>');                        

                    alert('return is 0');
                    return '0';
                }else{

                    alert('return is 1');           
                    return '1';         
                }
            });
        }
    </script> 
    </body>
</html>

なぜリターンが機能しないのか、何か考えはありますか?ありがとう。

4

3 に答える 3

0

コールバック関数getJsonObjectを使用して書き換える必要があります。

function getJsonObject(sectionName, pageNr, callback){   
   $.getJSON(..., function(data) {

      ...
      callback('1');
   }

使用getJsonObject:

getJsonObject(sectionName, pageNr+1, function(err) {
   alert(err);
});
于 2013-01-04T13:49:49.107 に答える
0

あなたgetJsonObject(sectionName, pageNr)$.getJSONAJAX非同期呼び出しです

したがって、リターンが正しく機能していません

于 2013-01-04T13:45:33.607 に答える
0

getJSON非同期で実行されるためです。一般的な解決策は、コールバックに別の引数を渡すgetJsonObjectことです。これは、最初に返したい値で呼び出します。

function getJsonObject(sectionName, pageNr, callback){        

    $.getJSON('http://content.guardianapis.com/search?q=' + sectionName +      '&page=' + pageNr + '&page-size=5&order-by=relevance&format=json&show-fields=all&date-  id=date%2Flast7days&api-key=gd6ndfndjyr8sd2p3rq3ubkg&callback=?', 
    function(data){                 
        var results;    

        /* I get status == error when I finish iterating the pages*/    
        if(data.response.status != 'error'){            

            $('#news').append('<p id="headline">'+data.response.results[pageNr].fields.headline+'</p>');                        

            alert('return is 0');
            callback('0');
        }else{

            alert('return is 1');           
            callback('1');         
        }
    });
}

これは、コールバック関数を渡す理由でもあります$.getJSON。舞台裏では、HTTP リクエストを非同期で実行するものを使用しているためです。

于 2013-01-04T13:46:38.317 に答える