2012-03-22 8 views
5

私のブログでは、コードスニペットを含む<pre>ブロックがたくさんあります。POSTデータを送信してJQueryでナビゲートするにはどうすればよいですか?

私は何をしたいことは別のページにその内容を送信するページ上のすべての<pre>の要素に.click()ハンドラを追加である - のは、viewcode.phpそれを呼びましょう - POST経由。

私は$.ajaxを使用してこのページに情報を送信する方法を知っています。私は情報を送信する方法がわかりませんページに移動します。

訪問者は<pre>をクリックすることができます。これは、コードを読みやすく、簡単にコピー/ペーストするためのコードを含む別のページに移動します。

私は解決策がシンプルで分かりやすいと感じていますが、私はそれについて考えることはできません。

+0

をあなたは($アヤックスコールのためのあなたの成功ハンドラでロードページ機能を呼び出すことはできません理由があります、私は思う、クリックでtriggedです)? –

+0

Heh。たぶん私はあなたが意味することを理解していないが、あなたのPOSTはこの新しいページに情報を送信すると仮定します。新しいページが情報を取得したら、ブラウザを新しいページにリダイレクトできますか? –

+0

うーん...ええ、気にしない。 =) –

答えて

10

ない私はそれをこのように扱うと確信:あなたは、ホバーのdivまたはjQueryプラグインを使用しているポップのアップとpre要素から取得したコードのクリーナー部分を示し、のようなものにしたいかもしれませんページを残すのではなく、コードでダイアログをポップアップするだけですが、javascriptを使用してフォームを作成し、AJAXを使用する代わりにそのフォームで送信をトリガーすることで、これを処理できます。

jQueryのUIとのダイアログを使用:

$('pre').on('click', function() { 
     $('<div title="Code Preview"><p>' + $(this).text() + '</p></div>').dialog({ 
      ... set up dialog parameters ... 
     }); 
}); 

$('pre').on('click', function() { 
     var text = $(this).text(); 
     $('<form class="hidden-form" action="something.php" method="post" style="display: none;"><textarea name="code"></textarea></form>') 
      .appendTo('body'); 
     $('[name="code"]').val(text); 
     $('.hidden-form').submit(); 
}); 
+4

* sigh *私は、フォームソリューションが唯一のものではないことを期待していました。 – Marty

+0

さて、AJAX経由でデータを投稿してからbody要素全体を結果に置き換えることができますが、単純に新しいページに投稿する以外はどうですか?(URLは変わらないことを除けば) – tvanfosson

+0

真実、私は再生しますさまざまなソリューション/ソリューションの組み合わせを中心に – Marty

1

非表示の<form>要素を使用できます。次に属性の<pre>を設定して、<pre>の値をフォームにコピーします。オプションで、action属性を設定して、情報を送信するページを選択することができます。最後に、そのフォームを提出してください。

私はそれがエレガントではないことは知っていますが、うまくいくでしょう。

+0

Hmm .. JQueryがそれに近づく方法がまだまだ整っていない場合、これは私の "フォールバック"アイデアでした。 – Marty

+0

$ .post()は$ .ajax()を呼び出すための省略形なので、デフォルトではリダイレクトできません。 $ .post()呼び出しでコールバックを使用して、 'location.href'をコールバックに渡された値に変更することができます。あなたがそれを何とか保存しないかぎり、おそらくその時点でそのページに投稿データはありません。隠された形は私がいつもそれをやったやり方で、あまりにも醜いわけではありません。 –

0

コードスニペットがデータベースまたはファイルのどこかに保存されている場合、スニペットをいくつかの識別子に基づいて取得するページにスニペットをリンクすることをおすすめします。

スニペットがHTMLにのみ含まれていて、よりクリーンな方法で表示したい場合は、Ajaxの投稿は必要ありません。私はおそらく、

$('pre').click(function() { 
    var code = $(this).html(); //this is the pre contents you want to send 
    $('#hoverDiv').html(code).show(); 
}); 
0

フォームを構築はい、あなたはフォームを作成し、それを提出しなければなりません。あなたはajax投稿/取得であらゆる種類のことを行うことができますが、投稿結果に移動する唯一の方法は実際のフォーム投稿を使用することです。ここでの簡潔なバージョンは次のとおりです。

$('<form style="display: none;"/>').attr('action', action).html(html).appendTo('body').submit(); 

私のコードは、この行います

// Navigate to Post Response, Convert first form values to query string params: 
// Put the things that are too long (could exceed query string limit) into post values 
var form = $('#myForm'); 
var actionWithoutQueryString = form[0].action.split("?")[0]; 
var action = actionWithoutQueryString + '?' + $.param(form.serializeArray()); 
var html = myArray.map(function(v, i) { return "<input name='MyList[" + i + "]' value='" + v + "'/>"; }).join("\n"); 
$('<form style="display: none;"/>').attr('action', action).html(html).appendTo('body').submit(); 
関連する問題