0

最初にページが読み込まれると、ajaxは選択メニューにデータを入力します。新しい患者情報を入力すると、それはデータベースに追加されますが、患者選択メニューは、その新しい患者が選択された状態で追加/更新されません。

私は誰かが私が間違っていることで私を助けてくれることを望んでいました。

Ajaxコール

$('#newpatient').click(function() {
    var patientadd = $('#patientaddform').serializeArray();
    $.ajax({
        url: 'patientadd.php',
        type: "POST",
        data: patientadd,
        dataType: 'json',
        success: function(data) {
            var html = '';
            var len = data.length;
            for (var i = 0; i < len; i++) {
                html += '<option value="' + data[i].patient_id + '">' + data[i].patient_firstname + ' ' + data[i].patient_lastname + '</option>';
            }
            $('#patientselect').append(html);
        },
        complete: function() {
            $('#patientselect').selectmenu('refresh', true);
        }
    });
});​

patientadd.php

if (empty($_POST) === false) {
    $update_data = array('company_id' = > $_POST['company_id'], 'addpatient_firstname' = > $_POST['addpatient_firstname'], 'addpatient_lastname' = > $_POST['addpatient_lastname'], 'addpatient_dob' = > $_POST['addpatient_dob'], 'patient_added' = > $_POST['patient_added']);


    $required_fields = array('company_id', 'addpatient_firstname', 'addpatient_lastname', 'addpatient_dob', 'patient_added');
    foreach($update_data as $key = > $value) {
        if (empty($value) && in_array($key, $required_fields) === true) {
            $errors[] = 'Fields marked with an asterisk are required';
            break 1;
        }
    }
}

if (empty($_POST) === false && empty($errors) === true) {

    $company_id = $_POST['company_id'];
    $patient_id = $_POST['addpatient_id'];
    $first_name = $_POST['addpatient_firstname'];
    $last_name = $_POST['addpatient_lastname'];
    $dob = $_POST['addpatient_dob'];
    $updated = $_POST['patient_added'];


    $update = array();
    array_walk($update_data, 'array_sanitize');

    foreach($update_data as $field = > $data) {
        $update[] = '`'.$field.'` = \''.$data.'\'';
    }

    mysql_query("INSERT INTO `lab`.`patients` (`company_id`,  `patient_id`, `patient_firstname`, `patient_lastname`, `patient_dob`, `patient_added`) VALUES ('$company_id', NULL, '$first_name', '$last_name', '$dob', '$updated')");
    $patient_id = mysql_insert_id(); /*echo '<strong>' . $patient_id . ' ' . $first_name . ' ' . $last_name . '</strong> has been added!';*/
}

$data = array('patient_id' = > $patient_id, 'patient_firstname' = > $first_name, 'patient_lastname' = > $last_name);
echo json_encode($data);
4

1 に答える 1

1

コードをから関数に移動completeしますsuccess

$('#newpatient').click(function() {
    var patientadd = $('#patientaddform').serializeArray();
    $.ajax({
        url: 'patientadd.php',
        type: "POST",
        data: patientadd,
        dataType: 'json',
        success: function(data) {
            var html = '';
            var len = data.length;
            for (var i = 0; i < len; i++) {
                html += '<option value="' + data[i].patient_id + '">' + data[i].patient_firstname + ' ' + data[i].patient_lastname + '</option>';
            }
            $('#patientselect').append(html);
            $('#patientselect').selectmenu('refresh', true);
        },
        complete: function() {
            //$('#patientselect').selectmenu('refresh', true);
        }
    });
});​

Ajaxの実行は非同期です。このsuccessメソッドは、リクエストが返すものだけを実行します。ただし、successトリガーされるのはトリガーされcompleteます。これは、実行が終了completeする前に実行される競合状態に陥ることを意味しますsuccessComplete終了するのを待ちませんsuccess。ほぼ同時に実行されますsuccesscomplete

更新呼び出しに新しいデータが含まれるようにするには、success次の範囲内で更新を実行しますappend

于 2012-09-20T22:38:47.693 に答える