Ajax表单提交不加载新提交的数据

时间:2013-01-25 08:41:53

标签: javascript jquery ajax jquery-mobile

我更新了jquery所以我可以玩新的jquery mobile ui 1.3并且由于某种原因我的表单不再更新页面了,它以前工作但它不是通过ajax,它只是提交没有ajax的表单,我然而,如果ajax只是获取新数据并将其附加到div而不是在弹出窗口关闭时再次重新加载整个页面。

我为表单使用弹出式模块,在提交时,它应将新信息附加到#content ul

JS。

<!-- Load Json data and events -->
<script type="text/javascript">
    jQuery('#new_rave').live('submit',function( event ) {
        $.ajax({
            url: 'http://whoops/goodtimes',
            type: 'POST',
            dataType: 'json',
            data: $('#new_rave').serialize(),
            success: function( data ) {
                for( var id in data ) {
                   jQuery('#').html(data[id]);
                }
            }
        });
        return false;
    });
    $(document).ready(function() {
        $.getJSON('http://whoops/goodtimes', function( goodtimes ) {
            $.each(goodtimes, function( goodtime ) {
        var output = 
            "<li><a href="+this.goodtime.id+">" + 
            "<h3>" + this.goodtime.title + "</h3>" +
            "<p>" + this.goodtime.post + "</p>" +
            "<p class='ui-li-aside'><strong>" + 
                this.goodtime.created_at + "</strong></p>" +
            "</a></li>";
            $('#content ul').append(output).listview('refresh');
        });
        });
    });
</script>

表格

<!-- New item Popup -->
<div data-role="popup" class="ui-content"
data-overlay-theme="a" data-position-to="window" id="add">
    <form id="new_rave">
        <label for="goodtime_title">Title</label>
        <input type="text" name="goodtime[title]" id="goodtime_title">
        <label for="goodtime_post">Rave</label>
        <div data-role="fieldcontain">  
        <textarea name="goodtime[post]" id="goodtime_post"></textarea>
        </div>
        <input type="submit" value="submit">
    </form>
</div>

和内容div

<div id="content" data-role="content">  
    <ul data-role="listview" data-theme="d" data-divider-theme="d"></ul>
</div><!-- /content -->

1 个答案:

答案 0 :(得分:1)

简介

您的问题可能是由于 $(文档).ready(function(){。在 jQuery Mobile 中,Ajax用于加载内容导航时,每个页面都会进入 DOM 。因为 $(document).ready() 会在加载第一个页面之前触发,并且每个代码都会用于页面操作将在页面刷新后执行。

可以在我的个人博客 article 中找到有关详细信息的所有内容。

如果这不是问题,请使用Firefox / Chrome插件 Firebug 来测试ajax调用是否已到达服务器以及是否已收到响应。

最后,每次添加新元素时都不要刷新 listview listview 刷新是一个巨大的时间下沉,每次刷新都可以持续约50毫秒,但需要花费很多时间,重新设置可能会永远消失。

解决方案

所以改变这个:

    $.getJSON('http://whoops/goodtimes', function(goodtimes) {
      $.each(goodtimes, function(goodtime) { 
        var output = 
        "<li><a href="+this.goodtime.id+">" + 
                "<h3>" + this.goodtime.title + "</h3>" +
                "<p>" + this.goodtime.post + "</p>" +
                "<p class='ui-li-aside'><strong>" + this.goodtime.created_at + "</strong></p>" +
            "</a></li>";
        $('#content ul').append(output).listview('refresh');
     });
    });

到此:

    $.getJSON('http://whoops/goodtimes', function(goodtimes) {
      $.each(goodtimes, function(goodtime) { 
        var output = 
        "<li><a href="+this.goodtime.id+">" + 
                "<h3>" + this.goodtime.title + "</h3>" +
                "<p>" + this.goodtime.post + "</p>" +
                "<p class='ui-li-aside'><strong>" + this.goodtime.created_at + "</strong></p>" +
            "</a></li>";
        $('#content ul').append(output);
     });
     $('#content ul').listview('refresh');
    });

修改

持续重复发布的问题在于jQuery Mobile如何处理事件绑定。因为每次事件都要反复绑定时,页面会不断重新访问。在您的情况下,这将是执行JSON调用的事件。

可以通过多种方式防止这种情况,最常见的方法是在绑定事件之前取消绑定事件。例如:

$('#test-button').off('click').on('click', function(e) {
    alert('Button click');
});