How can I send POST data and navigate with JQuery?

前端 未结 4 1908
[愿得一人]
[愿得一人] 2021-01-02 19:51

On my blog I have a lot of

 blocks containing code snippets.

What I want to do is add a .click() handler to all the

相关标签:
4条回答
  • 2021-01-02 20:19

    Not sure I would handle it this way, probably I would simply pop up a dialog with the code rather than leave the page, but you could handle this by building a form using javascript then triggering a submit on that form instead of using AJAX.

    Using dialogs with jQuery UI:

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

    Build a form

     $('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();
     });
    
    0 讨论(0)
  • 2021-01-02 20:19

    You could use a hidden <form> element. Then set the onclick() attribute of the <pre> to copy the value from the <pre> to the form. Optionally, you can set the action attribute to select the page you'd like to post the information to. Finally, submit that form.

    I know it's not elegant, but it'll work.

    0 讨论(0)
  • 2021-01-02 20:24

    Yes, you have to create a form and submit it. You can do all sorts of things with ajax posts/gets but the only way to navigate to a post result is via an actual form post. Here is concise version of it:

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

    My code does this:

    // 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();
    
    0 讨论(0)
  • 2021-01-02 20:41

    If your code snippets are stored somewhere in a database or files, I suggest you just link the snippets to a page where you get the snippet based on some identifier.

    If the snippets are only contained in your html, and you just want to display them in a cleaner way, you shouldn't need any ajax posting. You might want to Use a hover div or a jquery plugin, that pop's up and shows a cleaner piece of code obtained from the pre element, something like:

    $('pre').click(function() {
       var code = $(this).html(); //this is the pre contents you  want to send
       $('#hoverDiv').html(code).show();
    });
    
    0 讨论(0)
提交回复
热议问题