从另一个AJAX负载调用AJAX负载

时间:2018-03-16 15:16:09

标签: javascript php jquery ajax

我有一个页面A,它将表单参数传递给一个脚本,该脚本将结果的AJAX加载到第A页的div B.这样可行。我想扩展它以在div B中有另一个表单,它将参数传递给另一个脚本,该脚本应该在页面A的div C中对结果进行AJAX加载。我无法使其工作。

问题here是我能找到的最接近的问题,但这似乎是对第二次AJAZ加载的自动调用,而在这里我有一个表格介入。

使用Prototype的工作代码是:

first.php

<script type="text/javascript" src="js/prototype.js"></script>
<script>
Ajax.Responders.register({
    onCreate: function(){ Element.show('spinner')},
    onComplete: function(){Element.hide('spinner')}
});
</script>

<form id="first_form">
<input  /> etc etc
<input type="button" onclick="first_box()" value="Call get_first_data.php">
</form>

<script>
function first_box(){
    new Ajax.Updater( 
        'first_div',
        'get_first_data.php', { 
            method: 'post',
            parameters: $('first_form').serialize()
    });
}
</script>

<div id="first_div">
    <p>The output from get_first_data.php appears here.</p>
    <img alt="spinner" id="spinner" src="images/ajax-loader.gif" style="display:none;" />
</div>

对于建议的扩展,我想从first.php first_text div中的get_first_data输出调用另一个脚本,并且其输出也显示在first.php中。我已经完成了以下操作(基本上将上面的内容复制到了get_first_data.php的顶部),但是它没有用。

get_first_data.php

<script type="text/javascript" src="js/prototype.js"></script>
<script>
Ajax.Responders.register({
    onCreate: function(){ Element.show('spinner')},
    onComplete: function(){Element.hide('spinner')}
});
</script>

<form id="second_form">
<input  /> etc etc
<input type="button" onclick="second_box()" value="Call get_second_data.php">
</form>

<script>
function second_box(){
    new Ajax.Updater( 
        'second_div',
        'get_second_data.php', { 
            method: 'post',
            parameters: $('second_form').serialize()
    });
}
</script>

<div id="second_div">
    <p>The get_second_data output should appear here, but doesn't.</p>
    <img alt="spinner" id="spinner" src="images/ajax-loader.gif" style="display:none;" />
</div>

... rest of the get_first_data.php output ...

最后,这里的原型代码的JQuery等价是什么?

1 个答案:

答案 0 :(得分:0)

我希望我理解你的问题。

你说&#34;我想从first.php&#34; 中的get_first_data输出调用另一个脚本。你为什么要这样,因为get_first_data内容是按需加载的,例如在任何时候都不会随意使用?无论如何,在由ajax请求加载的页面中定义js / jquery脚本是一个正常的工作流程。下面的代码实现了它。我还添加了一个&#34; callSecondBoxButton&#34; first.php 中的按钮,它调用ajax加载的 get_first_data.php 页面中定义的 second_box()函数。因此,可以从 first.php get_first_data.php 中调用 second_box()函数。

我不熟悉 Prototype 表示,但 jQuery 代码如下所示。

您可能希望对 id 属性使用 camelCase 表示法,并优化错误处理以仅显示用户友好的消息。

first.php

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
        <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=yes" />
        <meta charset="UTF-8" />
        <!-- The above 3 meta tags must come first in the head -->

        <title>Demo - first</title>

        <script src="https://code.jquery.com/jquery-3.2.1.min.js" type="text/javascript"></script>

        <script type="text/javascript">
            $(document)
                    .ready(function () {
                        $('#spinner').hide();

                        $('#firstButton').click(function (event) {
                            first_box();
                        });

                        $('#callSecondBoxButton').click(function (event) {
                            if (typeof second_box === 'function') {
                                second_box();
                            } else {
                                alert('The "second_box" function is not (yet) defined!');
                            }
                        });
                    })
                    .ajaxStart(function () {
                        $('#spinner').show();
                    })
                    .ajaxStop(function () {
                        $('#spinner').hide();
                    });

            function first_box() {
                $.ajax({
                    method: 'post',
                    dataType: 'html',
                    url: 'get_first_data.php',
                    data: $('#first_form').serialize(),
                    success: function (response, textStatus, jqXHR) {
                        $('#first_div').html(response);
                    },
                    error: function (jqXHR, textStatus, errorThrown) {
                        $('#first_div').html(textStatus + '<br />' + errorThrown);
                    },
                    complete: function (jqXHR, textStatus) {
                        //...
                    }
                });
            }
        </script>
    </head>
    <body>

        <form id="first_form">
            <input type="text" value="abc" />
            <input type="button" id="firstButton" value="Call get_first_data.php">
            <input type="button" id="callSecondBoxButton" value="Call second_box() from first.php">
        </form>

        <div id="first_div">
            <p>
                The output from get_first_data.php appears here.
            </p>
            <img alt="spinner" id="spinner" src="images/ajax-loader.gif" />
        </div>

    </body>
</html>

get_first_data.php

<script type="text/javascript">
    $(document).ready(function () {
        $('#secondButton').click(function (event) {
            second_box();
        });
    });

    function second_box() {
        $.ajax({
            method: 'post',
            dataType: 'html',
            url: 'get_second_data.php',
            data: $('#second_form').serialize(),
            success: function (response, textStatus, jqXHR) {
                $('#second_div').html(response);
            },
            error: function (jqXHR, textStatus, errorThrown) {
                $('#second_div').html(textStatus + '<br />' + errorThrown);
            },
            complete: function (jqXHR, textStatus) {
                //...
            }
        });
    }
</script>

<hr />

<form id="second_form">
    <input type="text" value="def" />
    <input type="button" id="secondButton" value="Call get_second_data.php">
</form>

<div id="second_div">
    <p>
        The output from get_second_data.php should appear here, but it doesn't.
    </p>
    <img alt="spinner" id="spinner" src="images/ajax-loader.gif" />
</div>

get_second_data.php

<hr />

<div>
    I am the content/data of get_second_data.php.
</div>