0

プロジェクトに jQuery Address プラグインを実装しようとしています。

私はCrawling実装 (つまり hashbangs) の Asual の例に従っています。

私のJavaScript:

<script type="text/javascript">
    $.address.init(function(event) {
        // Initializes plugin support for links
        $('a:not([href^=http])').address();

        var handler = function(data) {
            $('.content').html($('#content', data).html()).parent().show();
            $.address.title(/>([^<]*)<\/title/.exec(data)[1]);
        };

        // Loads the page content and inserts it into the content area
        $.ajax({
            url: '/index.php?ACT=87&action=shows&_escaped_fragment_=' + encodeURIComponent(event.value),
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                handler(XMLHttpRequest.responseText);
            },
            success: function(data, textStatus, XMLHttpRequest) {
                handler(data);
            },
            contentType: 'text/html'
        });
    });
</script>

$.ajax() 呼び出しは、私が作成したダミーの HTML ページを要求しています。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html>
    <head><title>testing</title>
    </head>
    <body>
    <div id="content">test</div>
    </body>
</html>

この HTML ページをtext/htmlコンテンツ タイプとともに送信します。

リクエストは正常に実行され、ハンドラー匿名関数はページ データ全体を取得していますが、$('.content).html()コマンドは機能していません。するとalert($('#content', data).html());、 になりnull、何も起こりません。エラーはありませんが、コンテンツもありません。

私はこの時点でほとんど知恵が尽きたところです...何か推奨事項はありますか?

編集:明確にするために、問題はリクエスト自体、URL、ブラウザのセキュリティの問題ではありません。ページ上のリクエストからデータを選択して表示することができません。

さらに悪いことに、$.ajax() の URL を、存在しないことがわかっているページ (つまり 404 ページ) の URL に置き換えると、404 メッセージが正しく解析されて表示されます。

4

3 に答える 3

1

セレクターコンテキストを使用している可能性があると思います。

$('#content', data)

dataは jQuery オブジェクトではなく、単なる HTML であるため、これは機能しません。

私が考えることができる3つのオプション:

1)

//not sure if you can just wrap data within the selector so putting it in a variable
var myhtml = $(data);
$('#content', myhtml)

2) ダミーの HTML ページをその #content div のみにします。ajax 経由で取得するだけの場合は、ページ全体を用意する必要はありません。

3) jQuery.load関数を使用するようにコードを再構築してみてください。これにより、ロードされたファイルから特定のコンテンツを取得するためにセレクターを指定できます。 $('#result').load('ajax/test.html #container');

于 2011-12-07T20:46:36.437 に答える
1

あなたのajaxは大丈夫です。

JSFiddleで動作する他の回答は得られませんでしたが、これは機能します。ただし、それが最善の方法であるとは思えません。

var handler = function(data) {
    // Create jQuery object with received data
    var $content = $('<div></div>').html(data); 

    // Get the html that you wanted   
    var theHtml = $('#content', $content).html();

    // Place content into page proper
    $('.content').html(theHtml).parent().show();

    // Rest of function...
}

あなたがマゾヒスティックなタイプの場合は、次のようにすべて 1 行で表示されます。

$('.content').html($('#content', $('<div></div>').html(data)).html()).parent().show();
于 2011-12-07T20:56:09.390 に答える
0

動作しました。$.ajax() 呼び出しを次のように置き換えました。

$('.content').load('/index.php?ACT=87&action=shows&_escaped_fragment_=' + encodeURIComponent(event.value) +' #content');

$.ajax() で何が間違っていたのか誰かが教えてくれるかどうか知りたいです。

于 2011-12-07T20:46:22.660 に答える