AJAX表单提交仅在首次提交时有效

时间:2018-09-08 14:23:37

标签: php jquery ajax ajaxform

SCRIPT.JS

$(document).ready(function(){
    $('form').on('submit', function (e) {
        e.preventDefault();
        $.ajax({
            type: 'post',
            url: 'data/addtext.php',
            dataType: 'HTML',
            success: function (result) {
                $('#meo').html(result);
            }
        });
    });
});

INDEX.PHP

<div id="meo"></div>

ADDTEXT.PHP

<?php echo "HELLO WORLD" ?>

所以上面是我的代码。我想做的是每次我提交表单时,都会打印出“ HELLO WORLD”一词,此代码在第一次单击时起作用,提交输出将是

HELLO WORLD

现在,我想再次打印出来,所以我将再次单击“提交”按钮,但是在第二次提交时,什么都没有打印出来。为什么?

我想要的输出是

HELLO WORLD HELLO WORLD

换句话说,我想在每次提交时打印出“ HELLO WORLD”,但旧的输出将保留。因此,如果我提交表单3次,则输出应该是

HELLO WORLD HELLO WORLD HELLO WORLD

我知道我可以使用append而不使用表单来执行此操作,但是我想使用表单ajax来执行此操作而无需重新加载页面。同样,此代码有效,但仅在首次单击提交时有效。

为什么第二次点击提交不起作用?

3 个答案:

答案 0 :(得分:2)

您没有将结果附加到#meo,而是每次都完全替换它。

代替

$('#meo').html(result);

尝试将result附加到#meo中的现有值/ html。喜欢:

$('#meo').html($('#meo').text() + result);

答案 1 :(得分:2)

. html()会覆盖您设置的元素内的内容。请尝试使用. append()

答案 2 :(得分:-1)

>>> from collections import defaultdict
>>> triples =  [['sd', 'pd', 'od'], ['sd', 'pd1', 'od2'], ['sd2', 'pd2', 'od']]
>>> d = defaultdict(list)
>>> 
>>> for k,*l in triples:
...     d[k].extend(l)
...
>>> res = [[k]+l for k,l in d.items()]
>>> print(res)
[['sd', 'pd', 'od', 'pd1', 'od2'], ['sd2', 'pd2', 'od']]