【问题标题】:jQuery load reloading content in div via form submit in divjQuery通过表单提交在div中加载重新加载div中的内容
【发布时间】:2013-03-04 21:20:18
【问题描述】:

我正在开发一个消息传递系统。我已经完成了收件箱和消息查看部分。它们被加载到用户帐户页面上的 div 中,并且无需刷新页面即可全部使用。

我的 jquery 是基于 this article

在此处获得一些帮助,以获取消息链接以在不刷新页面的情况下在 div 中打开消息,以及如何添加过滤器以允许配置文件链接实际刷新并转到实际的配置文件页面。这一切都很好。

我转到消息发送端,它使用模式(twitter 引导程序)来加载外部表单。这也行得通,但我现在花了很长时间试图弄清楚如何对链接做同样的事情,使用表单提交,即在不刷新整个页面的情况下提交它。同样,我使用的 jQuery 与收件箱部分几乎相同。

这是收件箱代码:

<p id="waiting"><!-- ajax loading --></p>
<div class="messages"><!-- inbox --></div>

Javascript:

$.ajaxSetup({ cache: false});
$(document).ready(function(){
    // set up the click event
    $('a.loader').live('click', function() {
        var toLoad = '<? echo base_url(); ?>user/messaging/';
        $('.messages').fadeOut(100, loadContent);
        $('#load').remove();
        $('#waiting').append('<div id="load" style="height: 700px; background:url(<? echo base_url(); ?>files/recordCovers/index.html?<? echo rand(5,1555); ?>); background-size: cover;"><div class="circle"></div><div class="circle1"></div></div>');
        $('#load').fadeOut(1000);

        function loadContent() {
            $('.messages').load(toLoad, '', function(response, status, xhr) {
                if (status == 'error') {
                    var msg = "Sorry but there was an error: ";
                    $(".messages").html(msg + xhr.status + " " + xhr.statusText);
                }            
            }).fadeIn(4000, hideLoader());
        }
        function hideLoader() {
            $('#load').fadeOut(2000);
        }
        return false;
    });
});

<? // this makes the links open in the same div
// a:not(.profile) allows profile links to open in browser window
// we put class="profile" on profile links.?>
$(".messages").on("click", "a:not(.profile)", function (e) {
    $(".messages").load($(this).attr("href"));
    e.preventDefault();
});

【问题讨论】:

    标签: jquery html replace load hyperlink


    【解决方案1】:

    如果你想保持一个正常的表单并且只捕获提交事件,那么你可以这样做:

    http://jsfiddle.net/ufomammut66/uPvYx/2/

    基本上,在提交该表单时,我们将运行一个函数,而不是立即提交。我们发送一个 ajax 调用(提交您的表单数据),然后发送return false。返回 false 将阻止页面提交表单(此时它会再次提交,因为我们只是使用 ajax 提交的)。因此,您可以执行所有逻辑、ajax 调用、任何其他检查/处理,然后返回 false 以停止提交。

    我在其中添加了一些内容,以防您希望进行一些错误恢复或围绕使用 ajax 提交的条件。如果您返回 true 而不是 false,页面将继续提交表单并重定向到该页面。因此,如果您有禁用 ajax 提交的模式,您可以在此处使用它。我在那里放了一个废话检查,作为概念证明。您可以使用该检查来查看它是否有效。

    【讨论】:

    • 感谢您的回复,但现在我的脑细胞返回错误!我应该提到我正在用 PHP 做这件事,因为那是我的母语。所以我在将表单提交到 php 脚本、运行检查、失败时出现错误或成功时、添加到数据库、显示成功消息的基础上工作——所有这些都是非常老式的——我的目标是将其包装在简单的 JQuery 加载/ajax 中用于演示目的。我在网站上的其他地方也管理过类似的东西,但这次因为它是表单提交而失败了。我认为答案是添加一行简单的代码。不是!我想我需要阅读这个
    【解决方案2】:

    我想它会帮助你:

    function submit()
    {
     $.ajax({
          type:'POST',
          url: "your url to submit",
          data: ({param_1:somevar}),    
          dataType:"json",  
          beforeSend: function(){ //do something here }
              success: function(return){ //do something here }
     });
    }
    

    并且不要放置任何提交按钮。您可以使用以下方式调用提交函数:

    $('#button').click(function(){
            submit(somevalue);  
          });
    

    【讨论】:

    • 好的,对不起,我有点困惑(或愚蠢)......以上内容会包含在包含的表格中吗?而不是我从中加载它的页面。我用 id="button" 的按钮替换了提交按钮?周围的
      标签不是必需的吗?...简而言之,这不再是一个表单,而是完全在 JQuery 中处理并通过 json 传输?看来我需要抛弃我传统的 html 形式的思维方式,从一个全新的角度思考这个问题:/
    • 如果您需要提交表单,您可能有表单标签,但您不会提交此表单,您将仅使用 jquery 获取数据并使用它。如果您使用 PHP,上面的代码将提交带有 jquery 和 AJAX 的表单(并且不会刷新页面),只需将“要提交的 url”替换为函数路径,使用 PRINT 将值返回给 jquery。但是,如果您只需要使用 ajax 加载表单,请使用:api.jquery.com/jQuery.get
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    相关资源
    最近更新 更多