在这个脚本中,我们有一个'stager'函数,它将在数据发送回数据库之前充当屏幕上用户交互的中介。 AJAX调用成功,但不是div中数据库的查询,而是[object Object]。如果我检查控制台,我看到来自数据库的数据是正确的。如何更改我的代码,以便我可以在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');
});
答案 0 :(得分:1)
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);
});
答案 1 :(得分:0)
你正在返回一个对象,所以如果你想把它作为一个字符串试试:
$div.text(JSON.stringify(options.content));