【问题标题】:Refreshing dynamic select boxes without reloading page刷新动态选择框而不重新加载页面
【发布时间】:2013-01-22 09:24:22
【问题描述】:

我有一个 jquery 移动应用程序,它在页面加载时从数据库中读取数据,并使用用户特定的数据(例如他们最喜欢的地址)填充页面上的选择框。 我已经实现了一个 ajax 脚本,它删除了运行良好的选定选项。但是我需要找到一种方法来刷新选择框而不重新加载页面。 我收集 AJAX 是我需要走的路,但我不知道从哪里开始。 我假设我需要重新运行读取数据库的 php 文件,然后是获取返回数据并填充选择框的 javascript。

index.php(第一部分)

<?php 
$show_faves_pass=true;
$show_faves_cctr=true;
include('../includes/favourites.inc');
?>   

favorites.inc

$js_str='';

if ($show_faves_addr){

    // Postgres sql statement here

    $addr_json=json_encode($addr_rows);
    $js_str.="var fave_addresses=$addr_json;\n";
}

if ($show_faves_cctr){

    // Postgres sql statement here

    $cctr_json=json_encode($cctr_rows);
    $js_str.="var fave_costcentres=$cctr_json;\n";
}
if (strlen($js_str)>0){
    echo "<script type='text/javascript'>\n$js_str\n</script>\n";
}

index.php(第二部分)

//populate favourites pickers
    function findFave(arr,key,val){
      var found=null;
      $.each(arr,function(i,v){
        if (v[key]==val){
          found=v;
        }  
      });
      return found;
    }

var pass_fave_sel=$('select#pass_fave_picker');
    $.each(fave_passengers,function(i,fave){
      pass_fave_sel.append("<option value='"+fave.passenger_details_id+"'>"+fave.passenger_nickname.replace("'","\'")+"</option>");
    });


var cctr_fave_sel=$('select#cctr_fave_picker');
    $.each(fave_costcentres,function(i,fave){
      cctr_fave_sel.append("<option value='"+fave.cost_centre_id+"'>"+(fave.cost_centre_code+" ("+fave.cost_centre_nickname+")").replace("'","\'")+"</option>");
    });

希望这一切都有意义,任何帮助都将不胜感激, 提前致谢!

【问题讨论】:

    标签: php ajax jquery-mobile


    【解决方案1】:

    每个 jQM 元素都有自己的用于重新设置样式的刷新方法。

    例如:

    Listview 有一个:

    $('#listviewID').listview('refresh');
    

    这是一个示例:http://jsfiddle.net/Gajotres/AzXdT/。这是一个从 XML 数据动态生成的列表视图。

    按钮元素有一个:

    $('#buttonID').button('refresh');
    

    这是一个例子:http://jsfiddle.net/Gajotres/K8nMX/

    滑块有一个:

    $('#sliderID').slider('refresh')
    

    而你将使用这个:

    选择菜单有一个:

    $('select').selectmenu('refresh', true);
    

    现在您可以在此处看到一个模式。要刷新,请始终使用带有“刷新”参数的组件名称作为 s 函数。

    如果你要对整个页面进行重新设计,你应该使用这个method

    编辑:

       $.ajax({url: server_url,
            data: save_data,
            beforeSend: function() {
                $.mobile.showPageLoadingMsg(true);
            },
            complete: function() {
                $.mobile.hidePageLoadingMsg();
            },
            success: function (result) {
               // Here delete elements from select box
            },
            error: function (request,error) {
               // Throw an error
            }
        });
    

    【讨论】:

    • 为此干杯。但是由于我通过删除记录修改了数据库,那么我是否不需要再次读取数据库以获取正确的值,然后在最后一步刷新元素?
    • 当您从数据库中删除记录时,使用 ajax 成功状态并使用 jQuery 从选择框中删除元素。不要使用完成状态,因为在这种情况下,您无法知道是否所有数据都已成功从数据库中删除。
    • 谢谢大家,我没想过要那样做。虽然我需要在不久的将来添加一个添加地址部分,所以在他们选择他们刚刚添加的地址之一后,它会填充表单中的字段。所以我需要在那种情况下读取数据库。
    猜你喜欢
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 2021-10-29
    • 2012-03-06
    • 1970-01-01
    • 2012-03-04
    相关资源
    最近更新 更多