2012-08-02 144 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