簡體   English   中英

表單提交在AJAX之前完成,沒有'alert()'

[英]form submit completes before AJAX without an 'alert()'

我有一個頁面使用AJAX從php腳本中調用一些html。 在該html中,具有唯一ID的某個類的許多形式。 單擊提交按鈕后,希望通過AJAX將表單提交到php腳本,以使頁面不會重新加載或重定向。

我遵循了許多教程的示例( 例如此處 ),它們都可以工作...如果我在$(document).ready(function(){...});發出警報, 包裹他們。 我嘗試了至少三種或四種方法,結果始終是相同的。 .ready()沒有alert()的形式,POSTS到當前頁面。

因此,我要尋找的是需要在調用發送POST的函數之前拋出alert()的修復程序,因為沒有它,POST不會被AJAX捕獲,而只會發布到當前的.php文件中。

AJAX

function formSubmit(form) {

    var element = $(form);
    var id = element.attr("id");
    var form = new FormData($('#' + id)[0]);

    $.ajax({
        type: "POST",
        url: "deleter.php",
        data: form,
        cache: false,
        contentType: false,
        processData: false,

    });
}

$(document).ready(function () {
    alert(''); // Taking this out causes problems

    $('.delete_form').on('submit', function (event) {
        event.preventDefault();
        formSubmit(this);

    });
});

的HTML

<div class="box">
    <div class="image">
        <a href='.htmlspecialchars($string).'><img src="blank.gif" data-src="'.htmlspecialchars($small).'" width="250" height="376"></a>
    </div>
    <div class="boxOffice">
        <form class="delete_form" id="'.$form_count.'">
            <input  type="hidden" name="delete_link" id="delete_link"value="'.  $string .'" />
            <input  type="submit" name="submit" class="submitButton" id="deleteLinkButton" value=""/>
        </form>
    </div>
</div>

我意識到大約有200個與此相關的問題...我知道,因為我嘗試了他們的解決方案。 我是AJAX的新手(這是我的第一個項目),並且我無法以相同的結果重新安排代碼。

如果需要的話,我將包含用於獲取包含的html的代碼。

- 編輯 -有人指出問題可能出在頁面上的其他JS干擾了呼叫等。因此,我將頁面上的所有JS代碼准確地附加到當前狀態。 在這種狀態下,POST會按預期執行,但是一旦我刪除alert()它就不會執行。

有趣的是,當我抓取代碼時,我將getImages()調用移入了ready()並移出了它,這似乎會影響POST代碼是否正常工作。 我不知道為什么,但這可能是一個線索。

<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="jquery.unveil.js"></script>

<script>
    $(document).ready(function () {
        alert(''); // Taking this out causes problems


            $('.delete_form').on('submit', function (event) {
                event.preventDefault();

                var element = $(this);
                var id = element.attr("id");
                var form = new FormData($('#' + id)[0]);

                $.ajax({
                    type: "POST",
                    url: "deleter.php",
                    data: form,
                    cache: false,
                    contentType: false,
                    processData: false,

                });
            });

    });

    getImages(); // Moving this inside the .ready(func(){...}) breaks the POST ?? 

    function getImages() {
        $.ajax({
            type: "GET",
            url: "http://localhost/linkler/get_images.php?tag=chubby",
            cache: false,
            timeout: 30000,
            success: function(html){
                $('body').append(html);
                $("img").unveil(); 
            }
        });
        return false;
    }

</script>

不確定到底是什么問題,但是可以簡化您的js:

$(document).ready(function() {

    $('body').on('submit', '.delete_form', function (ev) {
        ev.preventDefault();
        $.ajax({
              type: "POST",
              url: "deleter.php",
              data: $( this ).serialize(),
              success:function(data){
                   alert(data);
              },
              error:function(data){
                   alert(data);
              },


        });

    });
});

編輯您通過ajax加載表格正確嗎? 在這種情況下,您必須將函數綁定到父元素(主體)。 請參閱我的語法更改。

只是從准備文檔的部分中刪除此方法

 $('.delete_form').on('submit', function (event) {
        event.preventDefault();
        formSubmit(this);

    });

我認為這與時機有關。 這就是為什么無法刪除“ alert('')”的原因。 將腳本更改為類似

function delete_form_init(){
 $('.delete_form').on('submit', function (event) {
    event.preventDefault();
    formSubmit(this);
    }



function formSubmit(form) {

var element = $(form);
var id = element.attr("id");
var form = new FormData($('#' + id)[0]);

$.ajax({
    type: "POST",
    url: "deleter.php",
    data: form,
    cache: false,
    contentType: false,
    processData: false,

});
}

$(document).ready(function () {
   delete_form_init();

});

});

這樣,函數delete_form_init將在.ready調用之前插入模型中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM