jQuery 控件的 AJAX 文本属性成功,返回 [对象对象]

AJAX text property of jQuery control succeeds, returns [object Object]

本文关键字:对象 返回 成功 属性 控件 AJAX 文本 jQuery      更新时间:2023-09-26

在这个脚本中,我们有一个'stager'函数,它将在数据发送回数据库之前充当屏幕上用户交互的中介。 AJAX 调用成功,但我有 [对象对象] 而不是来自div 内部数据库的查询。 如果我检查控制台,我看到来自数据库的数据是正确的。 如何更改我的代码,以便我可以在我的div 中获取文本。 我对 AJAX 和 JavaScript 的一般基本元素有什么误解/将来避免这种情况的技巧。

编辑:刚刚注意到这很可能是由于我的stageOptions对象没有AJAX调用作为属性,而是直接文本。 现在这更符合我想要表达的内容。

$(document).ready(function () {
            var stageOptions = {
                //some baseline options for the stager control
                size: {
                    small: 'small',
                    medium: 'medium',
                    large: 'large'
                },
                content: {
                    historical: 'historical',
                    predictive: $.ajax({
                    type: "POST",
                    url: "../Service.asmx/GetDrugs",
                    contentType: "application/json",
                    dataType: "json",
                    success: function (data) {
                        data.d;
                        console.log(data.d);
                        console.log('success');
                    },
                    error: function (xhr) {
                        console.log('error');
                    }
                })
                }
            };
            /*************functions************************/
            function stager(options) {
                var $div = $('<div>').addClass(options.size);
                $div.text(options.content);
                return $div;
            };
            stager({ size: stageOptions.size.small,
                //size and content will be much more variable in the future
                content: stageOptions.content.predictive
            }).appendTo('body');
        });

Stringify 不会解决这个问题。将 options.content 设置为div 的文本不起作用,因为您将整个内容对象设置为文本。我认为您可能还想重新考虑您是如何做到这一点的,因为您立即设置div 的文本,然后将其附加到正文中,而不检查您的 ajax 请求是否已完成。通常,您可以从options.content.responseJSON访问JSON,但是当您设置文本时,ajax调用尚未完成,此时仍未定义。

您可以将内容切换为:

$(document).ready(function () {
        var stageOptions = {
            //some baseline options for the stager control
            size: {
                small: 'small',
                medium: 'medium',
                large: 'large'
            },
            content: {
                historical: 'historical',
                predictive: 'predictive'
            }
        };
        /*************functions************************/
        function stager(options) {
            $.ajax({
                type: "POST",
                url: "test.json",
                contentType: "application/json",
                dataType: "json",
                success: function (data) {
                    var $div = $('<div>').addClass(options.size);
                    $div.text(data.d).appendTo('body');
                },
                error: function (xhr) {
                    console.log('error');
                }
            });
        };
        stager(stageOptions.size.small);
    });

你返回一个对象,所以如果你想把它作为一个字符串,试试:

 $div.text(JSON.stringify(options.content));