簡體   English   中英

jQuery ajax調用包含ajax調用的php頁面

[英]Jquery ajax call php page that contain ajax calls

我有2頁

1)index.php

2)feedy.php

1)在index.php中,我有以下代碼:

   $.ajax({        type: 'GET', 

            url: 'feedy.php?n=<?echo $nnn?>',  
            data: { get_param: 'value' }, 
            success: function (data) { 
                                 var names = data


                $('#content').html(data);           
            }
        });

2)在feddy.php中,我有以下代碼:

for (i=0;i<=10-1;i++){

$.ajaxSetup({async: false});
 $.post( 
             'addme.php',
             { txt: con, lnk:ln,addr:'".$addr."' },
             function(data) {
                $('#stage').html(data);

             }

}

如您所見,我在頁面上調用另一個頁面,該頁面又調用另一個頁面10次。

問題:index.php調用feedy.php,但它僅等待獲取php輸出,而不等待javascript代碼的輸出。 我可以等待,以便在feedy.php中完成所有調用嗎?

我認為可行的另一種解決方案是找到一種方法,將信號發送到index.php,即feedy已完成調用。

請幫我,因為我找不到解決方案:(

AJAX是異步的,這意味着它不會停止執行流程。

當您在index.php中進行AJAX調用時,它不會等待feedy.php的結果,因為它正在進行異步調用。

您必須重新考慮feedy.php返回數據的方式,確保它以同步方式進行。 這樣的一個示例是直接將所需的數據回顯到頁面,而不是將其包裝在異步函數調用中。

在feddy.php的For循環中,讓它向index.php返回一個完整的值,因此直到循環完成后它才返回。 或更合適的方法是,直到循環完成,JavaScript才能在index.php上繼續運行。

for (i=0;i<=10-1;i++){

    $.ajaxSetup({async: false});
    $.post( 
             'addme.php',
             { txt: con, lnk:ln,addr:'".$addr."' },
             function(data) {
                $('#stage').html(data);

             }

    if(i = 8) { //right before the i++ for the last execution
        return 'positive value';
    }
}

然后為索引添加if語句,以確保成功

 $.ajax({        type: 'GET', 

        url: 'feedy.php?n=<?echo $nnn?>',  
        data: { get_param: 'value' }, 
        success: function (data) { 
            if(response=='positive value') {
               var names = data


              $('#content').html(data);           
           }
        }
    });

您可以將來自feddy.php的JavaScript代碼放入index.php的函數中,並在初始ajax調用后調用該函數。

像這樣的某些功能可以完成您需要使用feddy.php進行的所有操作...

function doFeddyCalls()
{
    for (i=0;i<=10-1;i++){
        $.ajaxSetup({async: false});
        $.post(
            'addme.php',
            { txt: con, lnk:ln, addr:'".$addr."' },
            function(data) {
                $('#stage').html(data);
        });
    }
}

然后,當您對feddy.php進行ajax調用時,請執行以下操作。

$.ajax({
    type: 'GET', 
    url: 'feedy.php?n=<?echo $nnn?>',  
    data: { get_param: 'value' }, 
    success: function (data)
    { 
        var names = data
        $('#content').html(data);
        doFeddyCalls();  //Ajax on feddy.php     
    }
});

一旦使用了ajax函數將feddy.php加載到index.php ,JavaScript就會對加載的元素起作用。

編輯:由於您不希望用戶看到它們正在加載,因此可以使用$('#content').hide()隱藏該元素,或者同時顯示一個加載面板。 此答案描述了如何對多個Ajax調用執行單個回調,一旦加載完成,就可以用來顯示該元素。

暫無
暫無

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

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