【问题标题】:How to add parameter for the form action in ajax?如何在ajax中为表单动作添加参数?
【发布时间】:2017-02-09 17:01:33
【问题描述】:

我有以下表格,不用 ajax 也能正常工作

echo "

<form action='upload_Comment.php?post_id=$post_id' method='post' id='comments'>

<textarea class='form-control' name='comment' rows='1'></textarea>

<input type='submit' name='post_comment'>
</form>


    ";

但是我需要使用ajax来防止表单提交时页面重新加载。

$(document).ready(function(){
  $('#comments').on('submit', function(e) {
    e.preventDefault();

    $.ajax({
      url: "upload_comment.php?post_id= + post_id ",
      type: "POST",
      data: new FormData(this),
      dataType : 'json',
      contentType: false,
      processData: false,
      success : function(data){                   
                              console.log(data);

                      },
                      error: function(){alert('Error!')}
    })

  });
});

每次我提交新帖子时,我都需要一种方法来传递 $post_id 参数值,并且每个帖子的 post_id 都是唯一的。如何在 ajax 表单 url 中传递 post_id 参数?

【问题讨论】:

  • 如果它是服务器端变量,请将其放置在隐藏输入中,而不是操作的查询字符串中
  • 我尝试在隐藏字段中传递 $post_id 值,但它只从数据库中获取第一个帖子 ID,而不是特定于帖子提交
  • 您可能想尝试一下会话变量。通过在显示表单之前在会话变量中设置帖子 ID,并直接在您的处理程序中获取它,upload_comment.php 而不使用查询字符串。

标签: javascript php jquery ajax forms


【解决方案1】:

获取一个隐藏字段并将帖子 ID 的值分配给它

<form action='upload_Comment.php' method='post' id='comments'>
  <textarea class='form-control' name='comment' rows='1'></textarea>
  <input type="hidden" value="<?=$post_id;?>" id="postId">
  <input type='submit' name='post_comment'>
</form>

js代码会是

$(document).ready(function () {
    $('#comments').on('submit', function (e) {
        e.preventDefault();
        var post_id = $('#postId').val();
        $.ajax({
            url: "upload_comment.php?post_id=" + post_id,
            type: "POST",
            data: new FormData(this),
            dataType: 'json',
            contentType: false,
            processData: false,
            success: function (data) {
                console.log(data);

            },
            error: function () {
                alert('Error!')
            }
        })

    });
});

【讨论】:

  • 我试过了,但是 $post_id 的隐藏值总是被选为 1 并且每个表单提交的 post id 都不同,因为它是在一个循环中
  • 这是我的错误 url: "upload_comment.php?post_id=" + post_id 而不是 url: "upload_comment.php?post_id=+ post_id"
【解决方案2】:

你不应该混合使用 POST 和 GET 请求,因为 GET 用于获取信息,不能传入。 您的代码可能应该如下所示:

var fData = new FormData(this);
fData.append('post_id', post_id);

另外,请阅读:HTTP POST with URL query parameters -- good idea or not?

"upload_comment.php?post_id= + post_id "

应该看起来像这样(说真的,不要这样做):

"upload_comment.php?post_id=" + post_id 

【讨论】:

    猜你喜欢
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    • 1970-01-01
    • 2019-05-27
    相关资源
    最近更新 更多