【问题标题】:ajax call with jQuery Mobile to PHP使用 jQuery Mobile 到 PHP 的 ajax 调用
【发布时间】:2014-02-16 18:19:37
【问题描述】:

我的代码有问题,我通过 ajax 调用调用 php,我有正确的答案(我通过一些警报测试了 json 答案),我的问题是当我将数据附加到我的列表视图时,即使使用“刷新”,我的列表中也没有数据。请您帮我找出错误。

他给了我这个错误: 未捕获的错误:无法在初始化之前调用 listview 上的方法;试图调用方法“刷新”

这里是 HTML 和 jQuery 的代码

<script language="javascript" type="text/javascript">
    $(document).ready(function () {
            $.ajax({url: "SubCategory.php",
                dataType: "json",
                jsonpCallback: 'successCallback',
                async: true,
                success: function (result) {
                    ajax.parseJSONP(result);
                },
                error: function (request,error) {
                    alert('Network error has occurred please try again!');
                }
            });
        var ajax = {
                    parseJSONP:function(result){
                        $.each(result, function(i, row) {
                            $('#select-subCategory').append('<option value="'+row.id+'">Annuncio: '+row.name+'</option>');
                        });
                        $('#select-subCategory').listview('refresh');
                    }
                }
});
</script>
<body>
    <form method="post" action="SubCategory.php">
        <select id="select-subCategory" data-native-menu="false">
        </select>
    </form>
</body>

这是我的 php 文件

class SCategory
{
    public $id;
    public $name;
}
$SubCategories = array();
$SubCategories[0] = new SCategory;
$SubCategories[0]->id = 0;
$SubCategories[0]->name = 'first';
$SubCategories[1] = new SCategory;
$SubCategories[1]->id = 1;
$SubCategories[1]->name = 'second';
$SubCategories[2] = new SCategory;
$SubCategories[2]->id = 2;
$SubCategories[2]->name = 'third';
$SubCategories[3] = new SCategory;
$SubCategories[3]->id = 3;
$SubCategories[3]->name = 'fourth';
echo json_encode($SubCategories);

解决方案

从 HTML 中删除 'data-native-menu="false"',(也许是真的 默认),因此 HTML 中的选择变得简单

<select id="select-subCategory" ></select>

然后列表视图将刷新并 出现!! :)

【问题讨论】:

  • select 不是listview,您应该使用.selectmenu("refresh")
  • 我这个周末修好了,也许你是对的@Omar,我找到的解决方案是从 HTML 中删除 'data-native-menu="false"',所以选择变成

标签: javascript php jquery html jquery-mobile


【解决方案1】:

您正在使用$('#select-subCategory').append(

id 是selectsubCategory

但应该使用

$('#selectsubCategory').append(

【讨论】:

  • 对不起,这只是我在这里处理时的错误,即使设置相同的名称也不起作用
  • 我修好了,看看解决办法:)
【解决方案2】:

这应该可以正常工作

$.each(result, function(key, row) {
    $.each(row, function(id, name) {
        $("<option>").val(id).text(name).appendTo($('#selectsubCategory'));
    });
});

$('#select-subCategory').listview();

如果您正在加载整个列表,则需要对其进行初始化而不是刷新它

【讨论】:

  • 不,它不起作用,他给我这个错误 Uncaught Error: cannot call methods on listview before initialization;试图调用方法“刷新”
  • 这个错误在这一行$('#select-subCategory').listview('refresh');如果你跳过它怎么办?
  • 如果我跳过它我没有结果,没有错误但在我的视图中没有结果,需要刷新来刷新我的列表...
  • 如果你正在加载整个列表,你需要初始化它而不是刷新它。所以试试$('#select-subCategory').listview();
  • 我修好了,看看解决办法:)
【解决方案3】:

我解决了这个问题:

从HTML中删除'data-native-menu="false"',(可能默认为true),这样HTML中的选择就变得简单了

<select id="select-subCategory" ></select>

然后列表视图将刷新并出现! :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-27
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多