Jquery 完全基于第一个Ajax请求的结果发送Ajax请求

Jquery 完全基于第一个Ajax请求的结果发送Ajax请求,jquery,ajax,forms,Jquery,Ajax,Forms,我对jQuery并不感到惊讶,但是我正在构建一个系统,用户可以从一个静态类别中进行选择,该类别启动一个Ajax请求,特别是一个.load,它在第二个SELECT语句中返回数据 这完全符合我的目的。我遇到的困难是选择第二条SELECT语句来运行第二个Ajax请求。第二个请求根本没有输出,它似乎没有触发 请让我知道如何改进jQuery,以及如何让用户在第二个选择框中选择第三个选择框 我的Ajax: $(document).ready(function() { $("#squery").change

我对jQuery并不感到惊讶,但是我正在构建一个系统,用户可以从一个静态类别中进行选择,该类别启动一个Ajax请求,特别是一个.load,它在第二个SELECT语句中返回数据

这完全符合我的目的。我遇到的困难是选择第二条SELECT语句来运行第二个Ajax请求。第二个请求根本没有输出,它似乎没有触发

请让我知道如何改进jQuery,以及如何让用户在第二个选择框中选择第三个选择框

我的Ajax:

$(document).ready(function() {

$("#squery").change(function(e) {

    SelectText = $("#squery").val();
    PassData = $("#pdata").html();
    if (SelectText == ""){
        $("#teamMailer").slideUp();
    }
    else {
        $("#teamMailer").load("mailerAjax.php", { SelectInput: SelectText, PermissionData: PassData });
        $("#teamMailer").slideDown();
    }
});

/**
THE BELOW DOES NOT APPEAR TO WORK OR FIRE AT ALL.
**/

$("#S_part2").change(function(e) {

    Part2Text = $("#S_part2").val();
    PassData = $("#pdata").html();
    if (Part2Text == ""){
        $("#teamMailer2").slideUp();
    }
    else {
        $("#teamMailer2").load("../includes/mailerAjax2.php", { SelectInput2: Part2Text, PermissionData: PassData  }, function( response, status, xhr ) {
            if ( status == "error" ) {
                var msg = "Sorry but there was an error: ";
                 $( "#error" ).html( msg + xhr.status + " " + xhr.statusText );
                 }
        });
        $("#teamMailer2").slideDown();
    }
});
});
一些注意事项: mailerAjax.php文件包含完整的表单选择函数:

SELECT id="S_part2"
options
options
options
/SELECT
第一个Ajax的输出非常完美,但是第二个Ajax似乎没有启动,而且似乎没有返回。甚至一个错误都没有

我的HTML:

<div class="...">Select Recipient(s):</div>
            <div class="...">
<select name="Target" tabindex="1" required id="squery">
                    <option value="" selected>Choose...</option>
                    <option value="I">Individuals...</option>
                    <option value="T">A Team...</option>
                    <option value="G">A Group...</option>
                                        </select>
</div>
        </div>


        <div class="..." id="teamMailer">

        </div>
        <div class="..." id="teamMailer2">

        </div>
所以,1我喜欢jQuery的.load函数整洁的使用,但是我是否需要使用另一个函数,比如.post,我真的想避免数据传输

2忽略这一点

3我知道一个基本的解决方案可能是在基本HTML中不填充选择框,但是它看起来非常整洁,整个选择框只在填充后出现

那么,有没有一种方法可以从第二个选择框的Ajax返回中获取第三个选择框的Ajax返回

任何关于如何处理这个问题的指导,非常感谢

M

1.加载是一个GET请求

2号

3您的问题是无法绑定不存在的元素。我假设S_part2是从您的第一个请求加载的,因此您需要在更高级别进行绑定,并在事件冒泡时让事件委派处理它

因此,与此相反:

$("#S_part2").change(function(e) { ...
试试这个:

$("#teamMailer").on("change","#S_part2", function(e) { ...

这会将处理程序附加到确实存在的I-Aspect父div,并添加一个筛选器,以便它仅在事件的原始源与id S_part2匹配时执行。

谢谢。我自己也被弄糊涂了。加载为firebug声明它是一个GET请求,但数据在PHP中作为$_POST['data']处理。GET选项是空的,它可以工作,但在理想情况下,我更喜欢POST而不是GET,但它不是太重要。。。RE:处理程序-感谢您提供了关于形成请求的指针,现在您已经指出了这一点,这似乎很明显,我将尝试一下。。。ps-我的第二季度抱歉,这是一个愚蠢的问题:-/谢谢你,马特,这正是我想要的,为指针干杯@马丁:不确定你的GET vs POST有什么问题。按照惯例,这听起来应该是一个GET请求。至于为什么它在PHP端显示为$_POST,我不知道,但PHP很奇怪。是一个GET请求,firebug确认了这一点。