2011-11-16 14 views
11

私はレールアプリを持っており、pjaxリクエストで奇妙な動作を続けています。開発ログを調べると、2つの要求が行われていることがわかりました。最初のリクエストはpjaxであり、次のリクエストはpjaxではありません。その結果、ページはまだリロードされます。jquery pjax 2回送信要求

誰かが私にこれを助けることができれば感謝します。

+2

あなたの質問のスパースな説明以上のものを見る必要があります。関連するコード、ログファイルなどを投稿してください。 – Bojangles

+0

私は同じ問題を抱えています。私は利用可能な例がある[ここではcloudfoundry](http://scaffolding.cloudfoundry.com/book/list)。ページ区切りとテーブルソートのリンクはpjaxでなければなりませんが、firebugを使用すると、1つのXHR要求に続いてページ全体が更新されるのを見ることができます。そこに走っているアプリのソースコードは、[GitHub on here](https://github.com/robfletcher/grails-enhanced-scaffolding/tree/pjax)にあるでしょう。関連ファイルは 'grails.list.js'でしょう –

+1

Firebug私のケースでは、pjaxのデフォルトの成功ハンドラが、私が与えたフラグメントセレクタを使用してコンテンツを見つけられないことがわかっています。その場合、[pjaxコード](https://github.com/defunkt/jquery-pjax/blob/master/jquery.pjax.js#L106)を見ると、フルページの更新が実行されます。私はAJAXの応答がうまくいくようにセレクタが有効であるようにセレクタが動作していない理由を明確にしていません。 –

答えて

14

JQuery pjaxプラグインにはデフォルトのエラーハンドラがあり、ターゲットページをリロードするだけです。タイムアウトが過ぎると、このエラーハンドラが呼び出されます。pjaxは非常に低く設定されています。その結果、リクエストに時間がかかりすぎると、2つの同一のリクエストが表示されます。 pjax要求(おそらく_pjax属性が設定されている)、続いて別の非pjax要求が続きます。ブラウザでは、ページ全体が再読み込みされる可能性があります。

私の状況で私が見つけたことは、応答そのものはそれほど長くはかかっていないということでした。しかし、返されたHTMLにはフラッシュ埋め込みが含まれていました。私は、フラッシュ埋め込みがロードされる前または後に、pjaxコードが応答を受け取るかどうかはわかりません。この問題を解決するために

は、私は、これは直接pjaxを呼び出している、もちろん

$.pjax({ 
     url: xhr.getResponseHeader('Location'), 
     container: '#container', 
     timeout: 4000 // pick a suitable timeout 
     }); 

...のように見えるように、私のPJaxコードを変更しました。それを直接呼び出さない場合は、同様の解決策を見つける必要があります。

+0

私の人生を保存しました! :)それは2つの要求を送信していませんでしたが、最初にキャンセルしてからリロードするだけです。とにかく - 完全に動作します! –

1

私もこの問題に対処しました。ブラウザのキャッシュに関連する問題のようです。私は履歴とキャッシュをクリアしてクロムでそれが起こるのをやめると気づいた。私はまだそれを解決することができませんでしたが、私はそれがブラウザのキャッシュを無効にすると関係があると思いますか?

+1

私の問題は、要求がタイムアウトしたことでした。渡しタイムアウト:2000 pjax関数で私のためにそれを修正しました。私はレイアウトの一部に空のpjaxコンテナも見つけました。私がその断片に移動したとき、ブラウザのコンソールにエラーが表示されていました。私はそれに空のスパン要素を入れて修正することができました。 – andrewajo

関連する問題