繁体   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