【问题标题】:Hidden field returned by php is set properly but 'undefined' when getting the value with jqueryphp返回的隐藏字段设置正确但使用jquery获取值时“未定义”
【发布时间】:2014-03-26 21:45:00
【问题描述】:

我有一个 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”设置有多少字段。但是当我用 jquery 得到 '#num_fields' 的 val() 时,它会返回 undefined 直到你再次运行该函数,然后它具有上次运行时的值。

$.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 不合作。

【问题讨论】:

  • JavaScript(和 ajax)是异步的,在您检查隐藏字段的值之前,帖子尚未完成。只需将您的支票放在回调函数中即可。
  • 听起来它没有被当作价值。试试$('#num_fields').attr('value')

标签: javascript php jquery mysql hidden-field


【解决方案1】:

这个隐藏字段是从 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 尚未在文档中。

【讨论】:

  • 谢谢!我的头痛减轻了。 :D
【解决方案2】:

我认为 Post 是一个异步调用。 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);
};

【讨论】:

  • 为什么是-1?我会很感激理解我错在哪里(我知道我还有很多东西需要学习)
  • 这行不通,你对num_flds 的第一次分配什么也没做,因为隐藏在 DOM 中根本不存在。然后虽然你将赋值移到回调函数中,但你并没有移动其余的代码,所以它仍然会以不正确的顺序执行。
  • 非常感谢,你是对的,这会以同样的方式失败,因为它不会等待回复。不是吗?
  • 是的,当到达警报时,num_flds 仍然是未定义的。
  • 我不知道他们为什么给这个-1,我没有尝试过你的代码,但看起来它可以解决我遇到的问题。 Mihkel Viilveer 的回答解决了我的问题。感谢您的及时回答:D顺便说一句,我没有足够的分数来投票赞成或反对:(
猜你喜欢
  • 2011-08-25
  • 2011-03-12
  • 1970-01-01
  • 2015-08-12
  • 1970-01-01
  • 2011-03-06
  • 1970-01-01
  • 2011-03-22
  • 1970-01-01
相关资源
最近更新 更多