【问题标题】:jQuery UI dialog form submit that is defined with method=POST some how turns into a GET使用 method=POST 定义的 jQuery UI 对话框表单提交如何变成 GET
【发布时间】:2012-03-01 12:05:19
【问题描述】:

我可以借助一些帮助来更好地理解 jQuery 和 jQuery UI 对话框。

我正在使用 jQuery v1.8.18 UI Dialog 和 jQuery v1.7.1 加载包含表单的 html 页面。表单本身是由 Django 模板生成的。填写表格并单击“提交”后,我查看了在 Django 服务器端看到的 HTTP 请求。服务器将其视为带有空 GET 和 POST 字典的 GET 类型的 ajax 请求。

预期的结果将是一个包含实际提交数据的 POST。有人可以帮助我了解 UI Dialog 如何将 POST 请求更改为 GET 吗?我正在使用 Firebug,但需要一些调试想法。谢谢。

这就是我创建 UI 对话框的方式:

<script>
        $(document).ready(function() {
          var $dialog = $('<div></div>').load('/friend-request/').dialog({autoOpen:false, title:'Friend Request', modal:true});
         $('#friend-request').click(function() {
            $dialog.dialog('open');
                // prevent the default action, e.g., following a link
                return false;});

        });
</script>

#friend-request 元素只是一个 HTML 锚。我的表单很好地加载到对话框中。这是生成的 HTML 表单代码。

<form id="id-friendreq" method="post">
    <div style="display:none"><input type="hidden" value="12a94012df543b050d69f46f0012345" name="csrfmiddlewaretoken"></div>
    <div class="ctrlHolder" id="div_id_to_user">
        <label for="id_to_user">
            To user<span class="asteriskField">*</span>
        </label>
        <input type="text" maxlength="15" name="to_user" id="id_to_user">
    </div>
    <div class="ctrlHolder" id="div_id_message">
        <label for="id_message">
            Message<span class="asteriskField">*</span>
        </label>
        <textarea class="textarea" cols="40" id="id_message" name="message">Hi, please add me as your friend.</textarea>
    </div>
<div class="buttonHolder">
       <input type="submit" id="submit-id-submit" class="submit submitButton button white" value="Submit" name="submit">
</div>
</form>

【问题讨论】:

    标签: jquery-ui jquery jquery-ui-dialog


    【解决方案1】:

    如果您没有将 ajax 选项 type 设置为“POST”或使用 $.post() 等便捷方法,则默认为“GET”

    http://api.jquery.com/jQuery.ajax/

    【讨论】:

    • 在这个设置中,我实际上并没有直接调用 jQuery ajax 函数。我只是提交一个加载到 UI 对话框中的静态表单。 UI 对话框不是为此设计的吗?在对话框中提交此表单是否需要显式 ajax 调用?
    • 根本不需要,但您声明服务器将其视为“GET 类型的 ajax 请求”
    • 是的,我正试图了解这是怎么发生的。提交按钮是一个普通的旧 正如您在代码中看到的那样。
    • 表单没有action,所以某处必须有一个脚本提交处理程序
    • 看起来一旦表单被动态加载到对话框中,表单的提交按钮就会停止正常工作。我仍然不明白如何解决它,但解决方法是编写自己的提交处理程序并执行类似 .post() 的操作。 charlietfl 所说的内容很长。
    【解决方案2】:

    post 方法仅在您提交一些数据时使用。

    $(el).load(url,data,success)
    

    如果您不提供任何数据,则它相当于一个空白的 get 查询。即使在服务器端,如果您不发送任何数据,服务器也无法知道您是发帖还是获取请求。老实说,它只是关于数据,您也可以使用 get 查询发送帖子数据

    如果您必须明确使用 POST 请求,请使用:

    $.post(url,{},function(data){$('<div></div>').html(data)});
    

    【讨论】:

    • 我编辑了问题,表明我在点击提交之前已经填写了表格。从这个意义上说,有数据。我想我想了解的是完全覆盖表单的 POST 规范的机制。当该表单被单独查看和提交时(而不是在 UI 对话框中),它发布得很好。
    • 您在哪里提交表单?您的代码中没有任何处理程序
    • 好吧,也许这就是我的理解差距所在。我的印象是表单附带的提交按钮就足够了。表单是通过 jQuery load() 动态加载的,但我期望提交是非 ajax 的,可能是错误的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多