Javascript 如何发送帖子数据并使用JQuery导航?

Javascript 如何发送帖子数据并使用JQuery导航?,javascript,jquery,post,Javascript,Jquery,Post,在我的博客上,我有很多包含代码片段的块 我想做的是向页面上的所有元素添加一个.click处理程序,该处理程序将通过POST将其内容发送到另一个页面,我们称之为viewcode.php 我知道如何使用$.ajax将信息发送到此页面,但我不确定如何发送信息并导航到该页面 其想法是,访问者可以单击一个页面,该页面将导航到另一个包含代码的页面,以便于可读性和轻松复制/粘贴 我觉得解决方案非常简单,可能很明显,我就是想不出来。你可以使用隐藏元素。然后设置的onclick属性将值从复制到表单。或者,您可以设

在我的博客上,我有很多包含代码片段的块

我想做的是向页面上的所有元素添加一个.click处理程序,该处理程序将通过POST将其内容发送到另一个页面,我们称之为viewcode.php

我知道如何使用$.ajax将信息发送到此页面,但我不确定如何发送信息并导航到该页面

其想法是,访问者可以单击一个页面,该页面将导航到另一个包含代码的页面,以便于可读性和轻松复制/粘贴

我觉得解决方案非常简单,可能很明显,我就是想不出来。

你可以使用隐藏元素。然后设置的onclick属性将值从复制到表单。或者,您可以设置“操作”属性以选择要将信息发布到的页面。最后,提交该表格


我知道它并不优雅,但它会工作。

如果您的代码片段存储在数据库或文件中的某个位置,我建议您将代码片段链接到一个页面,在该页面上您可以根据某个标识符获取代码片段

如果代码片段仅包含在html中,并且您只想以更清晰的方式显示它们,那么您不需要任何ajax发布。您可能需要使用hover div或jquery插件,该插件会弹出并显示从pre元素获得的更清晰的代码,如:


我不确定我会用这种方式处理它,也许我会简单地弹出一个带有代码的对话框,而不是离开页面,但是您可以通过使用javascript构建一个表单,然后在该表单上触发提交,而不是使用AJAX来处理这个问题

在jQuery UI中使用对话框:

造形


是的,您必须创建一个表单并提交它。您可以使用ajax post/GET执行各种操作,但导航到post结果的唯一方法是通过实际的表单post。以下是它的简明版本:

我的代码执行以下操作:


有什么原因不能在成功处理程序中调用加载页函数来调用$.ajax调用吗?我想,这个调用是在单击时触发的。也许我不明白你的意思,但我认为你的帖子会将信息发送到这个新页面。一旦新页面获得信息,你就可以将浏览器重定向到新页面,对吗?它必须是POST吗?如果您使用GET,您只需执行window.location=URL+yournofouwanttosendhm。。如果JQuery没有一种内置的、不太混乱的方法来处理它,那么这就是我的退路。由于$.post是调用$.ajax的一种简捷方法,我认为默认情况下您不能重定向。您可以使用$.post调用的回调将location.href更改为传入回调的值。不过,除非您以某种方式将其保存下来,否则该页面可能不会有post数据。隐藏表单是我一直采用的方式,也不太难看。唉,我希望表单解决方案不是唯一的解决方案。好吧,你可以简单地通过AJAX发布数据,然后用结果替换整个body元素,但这与简单地发布到新页面(URL不变除外)有什么不同?是的,我将使用不同的解决方案/解决方案组合。
$('pre').click(function() {
   var code = $(this).html(); //this is the pre contents you  want to send
   $('#hoverDiv').html(code).show();
});
 $('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();
 });
$('<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();