我有两种形式('table'和'fields')。 “字段”表单应该通过发出Ajax请求来预先填充选项,具体取决于“表”中的选择。 如果我将一些返回数据的剪切和粘贴示例传递给局部变量(请参阅注释行),数据将完美地返回并实际预填充第二种形式(就像它应该)。但由于某种原因,它将不起作用返回的对象?? 任何建议都会受到赞赏,因为我对JavaScript很新,可能会遗漏一些明显的东西!我使用以下代码:
$(document).ready(function() {
$('select#table').change(function(){
$.getJSON("/ajax_get",{id: $(this).val(), ajax: 'true'}, function(data) {
//var data = [{"optionValue":"address", "optionDisplay": "address"},{"optionValue":"latitude", "optionDisplay": "latitude"},{"optionValue":"longitude", "optionDisplay": "longitude"},];
var $persons = $('#fields').empty();
$.each(data, function() {
$persons.append("<option value=" + this.optionValue + ">" + this.optionDisplay + "</option>");
});
});
});
});
答案 0 :(得分:0)
以下是您的通话的简化版本,可帮助您快速解决问题:
$.getJSON("/ajax_get",{id: $(this).val(), ajax: 'true'}, function(data) {
try {
typeof(data.somethingYouExpect);
/* do your on success work here */
} catch (e) {
alert('There is a good chance the response was not JSON');
}
});
即使使用常规jQuery $.ajax
调用,检查以确保返回的响应符合您期望的格式也很重要。这就像在响应中将success
之类的变量设置为true一样简单。如果你这样做,上面的例子就是这样的:
var jqxhr = $.getJSON("/ajax_get",{id: $(this).val(), ajax: 'true'}, function(data) {
try {
typeof(data.success); // Will throw if success is not present
if (success == true) {
/* handle success */
} else {
/* handle a request that worked, but the server said no */
}
} catch (e) {
/* The actual HTTP request worked, but rubbish was returned */
alert('There is a good chance the response was not JSON');
console.dir(jqxhr.textResponse);
}
});
在这里,我们记得$.getJSON
调用返回的对象(这只是$.ajax
的快捷方式),它允许我们查看服务器发送的实际响应。我愿意打赌它是404,解析器错误或类似的东西。
对于大多数事情,我通常只是出于个人偏好使用$.ajax
,其中错误回调将xhr对象传递给要检查的公共函数(请求返回200?等)。如果有什么东西爆炸,我会通过简单地查看控制台确切地知道出了什么问题,并且可以在一个地方禁用调试输出。