5

私はajaxリクエストにjQueryを使用し、サーバー側でSymfony1.4PHPを使用しています。

私の問題はタイトルにあります。

再現方法:

私のWebサイトのツイートを表示するためのフッターが(すべてのページに)あります。このフッターには、7秒ごとに最後のツイートを取得するための一種の「キープアライブコール」があります。

function loadNotyTweets(tweetCount) {

    var jqXhr = $.ajax({
        'url':'<?php echo url_for(array('module' => 'footer', 'action' => 'getLastApiTweets')) ?>',
        'type':'GET',
        'async':true,
        'dataType':'json',
        'cache': false
    }).done(function (data, textStatus, jqXHR) {
        if (data != null) {
            var j = 0;
            for (var i in data) {
                var text = formatNoty(data[i]['text'], data[i]['user']['screen_name'], data[i]['user']['name'], data[i]['user']['profile_image_url_https'], data[i]['created_at']),
                    hashTweet = calcMD5(text);

                if (!$.cookie(hashTweet) || $.cookie(hashTweet) != 'close') {
                    // Display a noty containing my tweet
                    generateNoty(text);
                }
                j++;
                if (j == tweetCount) {
                    break;
                }
            }
        }
    });

}

そしてサーバー側で:

function executeGetLastApiTweets(sfWebRequest $request) {
        if ($request->isXmlHttpRequest()) {

            // Get tweet using Twitter API
            $tweets = $this->getApiTweets($request);

            $lastTweet = '';
            if (isset($tweets[0]) && isset($tweets[0]['text'])) {
                $lastTweet = md5($tweets[0]['text']);
            }

            if ($this->isLastTweet($lastTweet)) {
                return $this->renderText(json_encode($this->getTweetsUI($tweets)));
            }

        }
        return sfView::NONE;
    }

これで、リンク上のWebサイトをクリックすると(loadTweets()が呼び出された直後)、クリックしたリンクの応答ではなく、このAjax呼び出しの応答が返されます。

ここで何が起こっているのかわかりません...

情報:

Apacheのdeflate圧縮をアクティブにしました。これから来るのではないかと思います。

私のApacheConfがあります。

    # MOD_DEFLATE COMPRESSION
    SetOutputFilter DEFLATE
    AddOutputFilterByType DEFLATE text/html text/css text/plain text/xml application/x-javascript application/x-httpd-php
    BrowserMatch ^Mozilla/4 gzip-only-text/html
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
    BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
    SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip
    Header append Vary User-Agent env=!dont-vary

    # BEGIN Expire headers
    <IfModule mod_expires.c>
     ExpiresActive On
     ExpiresDefault "access plus 7200 seconds"
     ExpiresByType image/jpg "access plus 1 days"
     ExpiresByType image/jpeg "access plus 1 days"
     ExpiresByType image/png "access plus 1 days"
     ExpiresByType image/gif "access plus 1 days"
     AddType image/x-icon .ico
     ExpiresByType image/ico "access plus 7 days"
     ExpiresByType image/icon "access plus 7 days"
     ExpiresByType image/x-icon "access plus 7 days "
     ExpiresByType text/css "access plus 7 days"
     ExpiresByType text/javascript "access plus 7 days"
     ExpiresByType text/html "access plus 7200 seconds"
     ExpiresByType application/xhtml+xml "access plus 7200 seconds"
     ExpiresByType application/javascript "access plus 7 days"
     ExpiresByType application/x-javascript "access plus 7 days"
     ExpiresByType application/x-shockwave-flash "access plus 1 days"
    </IfModule>
    # END Expire headers
# BEGIN Cache-Control Headers
<IfModule mod_headers.c>
 <FilesMatch "\\.(ico|jpe?g|png|gif|swf|gz|ttf)$">
   Header set Cache-Control "max-age=86400, public"
 </FilesMatch>
 <FilesMatch "\\.(css)$">
   Header set Cache-Control "max-age=604800, public"
 </FilesMatch>
 <FilesMatch "\\.(js)$">
   Header set Cache-Control "max-age=604800, public"
 </FilesMatch>
 <filesMatch "\\.(html|htm)$">
   Header set Cache-Control "max-age=7200, public"
 </filesMatch>
 # Disable caching for scripts and other dynamic files
 <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
   Header unset Cache-Control
 </FilesMatch>
</IfModule>
# END Cache-Control Headers

# KILL THEM ETAGS
Header unset ETag
FileETag none
4

1 に答える 1

2

ajax 変数を次のように宣言しました。

var jqXhr = $.ajax({

次に、変数を次のように参照します。

}).done(function (data, textStatus, jqXHR) {

間違っていたら訂正してください。javascript/jquery 変数は大文字と小文字を区別します。

于 2012-12-06T23:43:35.960 に答える