【问题标题】:How to populate select options when we have objects当我们有对象时如何填充选择选项
【发布时间】:2018-06-26 02:03:13
【问题描述】:

我已经使用 ajax 从数据库返回数据的查询现在我已经检查了响应并且我得到了以下格式的响应。

array(206) {
[0]=>
object(stdClass)#6707 (8) {
["id"]=>
string(1) "8"
["year"]=>
string(4) "1947"
["make"]=>
string(7) "Ferrari"
["model"]=>
string(5) "125 S"
["seats"]=>
string(1) "2"
["engine_type"]=>
string(1) "V"
["engine_i"]=>
string(3) "1.5"
["engine_cylinder"]=>
string(2) "12"
}
[1]=>
object(stdClass)#6708 (8) {
["id"]=>
string(1) "9"
["year"]=>
string(4) "1947"
["make"]=>
string(7) "Ferrari"
["model"]=>
string(5) "159 S"
["seats"]=>
string(1) "2"
["engine_type"]=>
string(1) "V"
["engine_i"]=>
string(3) "1.9"
["engine_cylinder"]=>
string(2) "12"
 }
}

如何在选择选项中填充这些字段,我编写的代码现在看起来像这样。

$('#cq-select-model').click(function () {
    $.ajax({
        url: "http://localhost/ferrari_hub/wp-admin/admin-ajax.php",
        data: {action: 'getPopulateField'},
        type: 'GET',
        success: function (data) {
            console.log(data);
            var $year = $('#car-years');
            var $make = $('#car-makes');
            var $model = $('#car-models');
            $year.find('option').remove();
            $make.find('option').remove();
            $model.find('option').remove();
            for (var i in data) {
                $year.append('<option value=' + data[i].year + '>' + 
                data[i].year + '</option>');
                $make.append('<option value=' + data.data[i].make + '>' + 
                data.data[i].make + '</option>');
                $model.append('<option value=' + data[i].model + '>' + 
                data[i].model + '</option>');
            }
        }
    });
});

但它没有填充这些字段,有人可以帮我填充这些字段吗?这将是一个很大的帮助。

提前谢谢你。

【问题讨论】:

  • 您显示的响应似乎是 var_dump,您可能应该返回一种 JavaScript 可以更好地使用的格式,例如 JSON。
  • 另外,console.log(data); 向您展示了什么?

标签: php jquery ajax database wordpress


【解决方案1】:

试试这个。解析 JSON 格式的数据并进行处理。

   $.ajax({
            url: "http://localhost/ferrari_hub/wp-admin/admin-ajax.php",
            data: {action: 'getPopulateField'},
            type: 'GET',
            success: function (data) {
                var result = JSON.parse(data);
                console.log(result);
                var $year = $('#car-years');
                var $make = $('#car-makes');
                var $model = $('#car-models');
                $year.find('option').remove();
                $make.find('option').remove();
                $model.find('option').remove();
                for (var i in result) {
                    $year.append('<option value=' + result[i].year + '>' + 
                    result[i].year + '</option>');
                    $make.append('<option value=' + result[i].make + '>' + 
                    result[i].make + '</option>');
                    $model.append('<option value=' + result[i].model + '>' + 
                    result[i].model + '</option>');
                }
            }
        });

【讨论】:

  • 不,for (var in ) 是合法循环。
  • 是的,将数据解析为 Json 格式解决了我的问题,谢谢
【解决方案2】:

未经测试,但您可能可以使用Option 构造函数来创建选项,而不是连接字符串。 See here for details

模型使用data.data[i],但其他模型使用data[i] ~ 看起来不一致,所以假设响应是json,也许这可能有用?

$('#cq-select-model').click(function () {
    $.ajax({
        url: "http://localhost/ferrari_hub/wp-admin/admin-ajax.php",
        data: {action: 'getPopulateField'},
        type: 'GET',
        success: function (data) {
            console.log(data);

            var $year = $('#car-years');
            var $make = $('#car-makes');
            var $model = $('#car-models');

            $year.find('option').remove();
            $make.find('option').remove();
            $model.find('option').remove();

            for ( var n in data ) {
                var obj=data[ n ];

                $year.append( new Option( obj.year, obj.year ) );
                $make.append( new Option( obj.make, obj.make ) );
                $model.append( new Option( obj.model, obj.model ) );
            }
        }
    });
});

【讨论】:

  • 这个解决方案实际上对我有用,我正在使用的另一种方法也是正确的,唯一破坏它的问题是我没有将数据解析为 Json 格式。谢谢你给我提示Json
猜你喜欢
  • 1970-01-01
  • 2017-03-22
  • 1970-01-01
  • 2018-03-01
  • 1970-01-01
  • 2023-03-19
  • 2017-07-19
  • 1970-01-01
  • 2022-12-04
相关资源
最近更新 更多