簡體   English   中英

jQuery:將HTML添加到父Div作為AJAX的結果

[英]JQuery: Add HTML to Parent Div as Result of AJAX

我不太清楚如何將從AJAX調用檢索的HTML添加到PHP函數。

首先,這是AJAX函數:

function selectListAJAX(fieldId, newclass){
    $.ajax({
        url: "http://brand.emich.edu/forms-and-tools/sections/departmental/university-archives/monthly/ajax-selectbox.php",
        type: "POST",
        data: { field_id: fieldId },
        success: function(response){
           $(newclass).html(response);
        },
        error: function(){
           alert("Error");
        }
    });
}

這是應該添加HTML的地方:

$(this).parent().parent().after('
    <div class="form-group '+ field_name +'-row row">
        <div class="col-sm-6">
            <input type="text" name="'+ field_name +'[]" class="form-control item-field">
        </div>
        <div class="col-sm-3 selectajax">'+ 
            selectListAJAX(newFieldId, selectajax) +'
        </div>
        <div class="col-sm-3 add-field">
            <input type="number" name="'+ field_name +'qty[]" class="form-control align-right ' + field_name + 'qty">
        </div>
    </div>
');

我嘗試了向函數等添加參數的幾種變體,但是我能想到的最好的辦法是在div而不是響應中放置一個大的“ undefined”。

哦,如果有人可以解釋為什么我必須將我的.after()中的代碼全部粉碎在一起,以使瀏覽器理解它,則可以加分。 我查看了以前的線程,並看到用'\\'轉義行,但這似乎行不通。

問題是selectListAjax()不返回值。 對結果響應的所有處理都應在ajax調用的success()處理程序內,因為ajax調用(根據定義)是異步的。 請注意,該方法還可能在您的success()處理函數完成之前返回。

從小開始。

試試(html):

<div>
    <div class="target"></div>
</div>

(腳本):

$.ajax({
        url: "http://brand.emich.edu/forms-and-tools/sections/departmental/university-archives/monthly/ajax-selectbox.php",
        type: "POST",
        data: { field_id: fieldId },
        success: function(response){
           $('.target').html(response);
        },
        error: function(){
           alert("Error");
        }
    });

當您調用selectListAJAX時:

<div class="col-sm-3 selectajax">'+ 
   selectListAJAX(newFieldId, selectajax) +'
</div>

selectajax是一個變量,您可以將其用作ajax成功的選擇器。 如果要傳遞選擇器,則需要使用如下字符串:

<div class="col-sm-3 selectajax">'+ 
   selectListAJAX(newFieldId, + 'selectajax' +) +'
</div>

正如Keith所提到的:“結果響應的所有處理都應在success()處理程序內進行……”這是正確的。 但是,還會出現一個問題,當創建另一個選擇框時,也會重新創建所有現有的選擇框,因為我要求jQuery將每個 div中的HTML替換為“選擇” AJAX類。

為了將列表添加到新創建的div中 ,還必須為該div動態創建一個ID:

      success: function(response){
            var numberOfLists = $('.'+fieldName+'selectajax').length;

            $('.'+fieldName+'selectajax').each(function(index, element) {
                if(index == numberOfLists -1){
                    var idOfLast = $(this).attr('id', 'currentselectajax');
                    $(idOfLast).html(response);
                } else {
                    $(this).removeAttr('id');
                }
            });
     },

首先,收集數組的長度(給定類的div數存在)。 然后,為每一個找到最后一個(長度為1)。 對於最后一個,為其創建一個ID,然后使用.html(response)將響應轉儲到其中。 對於其他所有屬性,請刪除ID屬性,以繞過這些div中的HTML更改。

暫無
暫無

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

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