在 AJAX 响应后重新选择选项值


Re-select option value after AJAX response

我有一个非常简单的表单,我正在使用PHP,AJAX和jQuery构建。 表单由从数据库填充的现有人员的选择框组成。 下面是常见的联系信息(地址、城市、电话等) 加载页面时,除了包含人员的选择框外,表单为空。

基本思想是,当用户选择某个人时,它应该将该人的联系信息填充到表单中。 表单显示为模式窗口,因此我不希望页面刷新,因此我向服务器发送传递唯一 ID 的 AJAX 请求,反过来,服务器使用带有该人员联系信息的 JSON 编码 PHP 数组进行响应。 我正在获取这些信息并填充表单。

所有这些都按照我的需要工作,除了应该进入选择框的数据(例如状态)。 我已成功检索正确的状态值,并已验证该值与选择中的选项匹配,但我无法让它更改选择框中的选定值。

以下是我的代码的亮点:

<!-- abridged generated HTML -->
<select name="PersonID" id="PersonID">
    <option value="1">Mike</option>
    <option value="2">Jim</option>
    <!-- etc... -->
</select>
<input type="text" id="City" />
<select name="AttState" class="selectpicker" id="AttState">
    <option>State</option>
    <option value="AL">Alabama</option>
    <option value="AK">Alaska</option>
    <!--And so on... -->
</select>
<!-- etc...  -->

然后是Javascript...

$(document).ready(function() {
    // This will pre-select when the form is initially loaded
    var selState = "TX";
    $("#PersonID").on('change', function(e) {
        personId = $("#PersonID").val();
        $.getJSON('GetPersonInfo.php?q=' + personId, function(data) {
            $.each(data, function(key, val) {
                $("#City").val(val.City);
                selState = val(val.State);
                // Plus all of the others...
        });
    });
    $("AttState").val(selState);
});

表单最初加载时,州被预先选择为德克萨斯州;但是,当选择人员并且 selState 更改(由警报验证)时,它不会设置为正确的值。 我读过一些帖子,这些帖子似乎围绕着确保 JavaScript 代码存在于 $(document).ready(function() 函数中,所以我怀疑 AJAX 调用不会重新触发函数。 我不知道如何让它工作。

您应该将这段代码放在 AJAX 请求的成功回调$("AttState").val(selState);中,如下所示:

$.getJSON('GetPersonInfo.php?q=' + personId, function(data) {
    $.each(data, function(key, val) {
       $("#City").val(val.City);
       selState = val(val.State);
       // Plus all of the others...
    });
    // its depend on your code whether inside .each() or not
    $("#AttState").val(selState);
});