【问题标题】:How to make comparison using JSON/jQuery and PHP data如何使用 JSON/jQuery 和 PHP 数据进行比较
【发布时间】:2018-05-13 18:51:12
【问题描述】:

我目前正在根据所选州/省使用 JQuery 代码和 JSON 文件在选择中加载城市。 JQuery 在下面。

$(document).ready(function() {

    $.getJSON('../../../js/statesCities.json', function(data) {
        var items = [];
        var options = '<option value="">Selecione</option>';
        $.each(data, function(key, val) {
            options += '<option value="' + val.sigla + '">' + val.sigla + '</option>';
        });
        $("#estados").html(options);

        $("#estados").change(function() {

            var options_cidades = '<option value="">Selecione</option>';
            var str = "";

            $("#estados option:selected").each(function() {
                str += $(this).text();
            });

            $.each(data, function(key, val) {
                if (val.sigla == str) {
                    $.each(val.cidades, function(key_city, val_city) {
                        options_cidades += '<option value="' + val_city + '">' + val_city + '</option>';
                    });
                }
            });
            $("#cidades").html(options_cidades);

        }).change();

    });

});});

我使用的 JSON 代码:https://gist.github.com/letanure/3012978

HTML 选择:

<div>
    <b>Estado:</b>
    <select id="estados" class="form-control" name="estadoCliente" required>
        <option value="">Selecione</option>
    </select>
</div>
<div>
    <b>Cidade:</b>
    <select id="cidades" class="form-control" name="cidadeCliente" required>
        <option value="">Selecione</option>
    </select>
</div>

事实上,这段代码运行良好。但是当我想使用 PHP 数据填写表格时,代码没有帮助。 (注册页面和编辑一样,在编辑页面,PHP加载用户信息)。如果所有州和城市都预先加载在 HTML 中(输入所有选项),为了检查数据库中的州和城市,我会使用内联 PHP 的 if ,将变量 $state 视为填写此表单的任何用户的状态。

&lt;option &lt;?php echo $state=='AB'?'selected': ''?&gt;&gt;AB&lt;/option&gt;

但它不能被使用,因为函数 $.each 不会接受来自 PHP 的变量。所以,我的问题是如何对每个选项进行验证,将州和城市保存在数据库中?我将使用这段代码来加载用户的数据,这样我可以更轻松地编辑信息。

PS:我不知道如何才能更好地在标题上描述这个问题。

【问题讨论】:

  • 到底是什么问题。据我了解您的帖子,您可以使用 javascript 生成您的选择,如果用户已经注册并预先选择了他们的城市和省份,您现在想使用 PHP 做同样的事情?您是否尝试过一些事情,或者您甚至不知道从哪里开始?
  • 不知何故我觉得你不知道 php 是一种服务器语言。您只是不排队 php 语句并期望 php 会响应 JavaScript 更改事件。
  • @Lou 我有这个注册页面,管理员可以在其中注册用户。但是我编程的方式是编辑页面和注册一样。因此,在编辑用户时,系统必须从数据库中加载数据,并进行比较。明白了吗?
  • @Xorifelse 我当然知道。 PHP 不是加载城市的算法的一部分。实际上,该内联代码用于编辑页面,以检查用户的状态和城市,并在相应的选项上放置“已检查”属性。你明白了吗?
  • @GuilhermyCamargo 以及您使用的数据库技术是什么?

标签: php jquery json forms comparison


【解决方案1】:

因为您是在前端加载数据,所以您需要将后端值存储在某处,然后在加载数据后,使用 JS 进行比较并选择正确的选项。

在您的 html 中,您可以这样做(假设您没有使用模板引擎):

<div>
    <b>Estado:</b>
    <select id="estados" class="form-control" name="estadoCliente" initial-val="<?php $estado; ?>" required>
        <option value="">Selecione</option>
    </select>
</div>
<div>
    <b>Cidade:</b>
    <select id="cidades" class="form-control" name="cidadeCliente" initial-val="<?php $cidade; ?>" required>
        <option value="">Selecione</option>
    </select>
</div>

您应该在上面看到initial-val="..." 的用法,您可以随意调用它。您将在数据加载时使用这些值...

所以,你的 JS 现在会使用这些,就像这样:

$(document).ready(function() {

    $.getJSON('../../../js/statesCities.json', function(data) {
        var items = [];
        var options = '<option value="">Selecione</option>';
        $.each(data, function(key, val) {
            options += '<option value="' + val.sigla + '">' + val.sigla + '</option>';
        });

        // always cache your jquery dom lookups in a var if queries more than once.
        var $estados = $("#estados");
        var $cidades = $("#cidades");

        $estados.html(options);
        $estados.change(function() {

            var options_cidades = '<option value="">Selecione</option>';
            var str = "";

            $("option:selected", $estados).each(function() {
                str += $(this).text();
            });

            $.each(data, function(key, val) {
                if (val.sigla == str) {
                    $.each(val.cidades, function(key_city, val_city) {
                        options_cidades += '<option value="' + val_city + '">' + val_city + '</option>';
                    });
                }
            });
            $cidades.html(options_cidades);
            $cidades.val($cidades.attr("initial-val"));

        }).change();

        // now set the value on the "estados" <select> and trigger the change event, so the above code runs to change "cidades"
        $estados.val($estados.attr("initial-val")).trigger( "change" );

    });

});});

那,我希望能为您提供一个可以构建的解决方案。

【讨论】:

  • 老兄,非常感谢您的回答。但我认为您的代码改编只专注于加载所选州的城市。我需要检查已经填写表格的特定客户(其数据已加载到 PHP)的州和城市。我是对的,还是我不明白你做了什么?
  • 我想我当时不明白你的问题。我现在也不确定。此代码更改允许您的表单从根本上恢复用户之前选择的值,并且可能在之前的会话/页面加载中保存到您的数据库中。
  • 我的问题是注册页面和编辑页面一样。因此,在加载编辑用户信息时,代码必须检查选择了哪个州和城市。
  • @GuilhermyCamargo 但信息是否已保存?如果是这样,那么我建议的答案将解决您面临的问题。它将重新选择用户选择的选项。你试过了吗?
  • 是的。数据保存在 MySQL 数据库中。是的,我试过你的解决方案。当我在编辑页面时,选择就像 (image.ibb.co/jCWhTy/aaa.png)。
猜你喜欢
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 2019-02-15
  • 2016-01-07
  • 1970-01-01
  • 1970-01-01
  • 2018-11-17
  • 2017-11-30
相关资源
最近更新 更多