Скрытое поле, возвращаемое php, установлено правильно, но не определено при получении значения с помощью jquery.

У меня есть файл javascript, публикующий данные в php-файлах, которые, как предполагается, получают данные из базы данных mysql, а затем заполняют поля указанными данными. Когда я вызываю функцию php для хранения имен полей в базе данных, она возвращает скрытое поле с количеством полей в таблице, которые хранятся в качестве значения для скрытого поля:

$i = 0;
$field_names = [];    

while($i < mysql_num_fields($request)){
    $field = mysql_fetch_field($request, $i);
    $field_names[] = $field->name;

    if(!$field){
        die('something is wrong with the field var');
    };

    echo('<div class="fields" id="field_' . $i . '">' . $field->name . '<br /></div>');
        $i++;
};

    echo('<input type="hidden" value="' . $_POST['postselecttbl'] . '" id="hidden_tbl" />' .
         '<input type="hidden" value="' . count($field_names) . '" id="num_fields" />');

    $_SESSION['field_names'] = $field_names;

Кажется, все работает. Скрытое поле '#num_fields' устанавливается в зависимости от количества полей. Но когда я получаю val() из '#num_fields' с помощью jquery, он возвращает неопределенное значение до тех пор, пока вы снова не запустите функцию, а затем он получит значение, указанное в предыдущий раз, когда она была запущена.

$.post('php/get_flds.php', {postdbhost: dbhost, postdbuser: dbuser, postdbpass: dbpass, postselectdb: selectdb, postselecttbl: selecttbl},
    function(d){
        $('#display_out').html(d);
    }
);

var num_flds = $('#num_fields').val();

alert('about to pop ' + num_flds);

for(var i = 0; i < num_flds; i++){
    alert('populating ' + i);
    pop_fld(i);
};

Правильно ли настроен скрытый вход? Я имею в виду, он показывает в HTML-коде, как установлен, но JQuery не сотрудничает.

2 ответа

Решение

Это скрытое поле вызывается из запроса AJAX? Если так, то попробуйте следующее:

$.post('php/get_flds.php', {postdbhost: dbhost, postdbuser: dbuser, postdbpass: dbpass, postselectdb: selectdb, postselecttbl: selecttbl},
    function(d){
        $('#display_out').html(d);
        var num_flds = $('#num_fields').val();

        alert('about to pop ' + num_flds);

        for(var i = 0; i < num_flds; i++){
             alert('populating ' + i);
             pop_fld(i);
        };
    }
);

В противном случае jquery пока не знает значения, так как этого DOM еще нет в документе.

Думаю, пост - это асинхронный вызов. var num_fields устанавливается ДО завершения запроса на публикацию, и вы должны обновить его значение после завершения публикации. Попробуйте что-то вроде:

var num_flds = $('#num_fields').val();
$.post('php/get_flds.php', {postdbhost: dbhost, postdbuser: dbuser, postdbpass: dbpass, postselectdb: selectdb, postselecttbl: selecttbl},
    function(d){
        $('#display_out').html(d);
        num_fields = $('#num_fields').val();
    }
);



alert('about to pop ' + num_flds);

for(var i = 0; i < num_flds; i++){
    alert('populating ' + i);
    pop_fld(i);
};
Другие вопросы по тегам