2012-08-02 90 views
0

我有两种形式('表'和'字段')。通过发出Ajax请求,'fields'表单应该根据'table'中的选项预先填充选项。 如果我将一些返回数据的剪切 - 粘贴示例传递给局部变量(请参见注释行),数据完全返回并实际预填充第二种形式(如应该)。但由于某些原因,它不起作用在返回的对象?? 任何意见,将不胜感激,因为我是JavaScript的新手,我可能错过了明显的东西!我使用下面的代码:jquery/ajax语法帮助需要

$(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

'$ this'应该是'this'。 – bfavaretto 2012-08-02 22:13:07

+0

对不起,现在已编辑。但问题是相同的。 – user1570955 2012-08-02 22:20:13

+0

确保您的服务器操作系统返回*有效* JSON。 – bfavaretto 2012-08-02 22:22:58

回答

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?等)。如果某些东西爆炸了,我可以通过简单地查看控制台确切地知道出了什么问题,并且可以在一个地方禁用调试输出。

+0

感谢Tim的这种详细回复,非常感谢。这是返回数据中的额外逗号(由我在循环中操作数据的方式引起),使其成为无效的JSON响应。 json_encode和json_decode现在是我最好的朋友;)干杯。 – user1570955 2012-08-03 07:32:58