需要jquery / ajax语法帮助

时间:2012-08-02 22:01:40

标签: javascript php jquery ajax

我有两种形式('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>");
  });
});
});
});

1 个答案:

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