2011-08-23 103 views
2

我想寫一個非常簡單的自動提示功能型,這樣,只要用戶輸入一個值到搜索輸入,匹配結果的列表出現在下面(在UL用的ID播放列表)。.getjson結果不顯示

$("#ep_search").keydown(function() { 

    var term = $("#ep_search").val(); 
     url = "includes/live_search.php?jsoncallback=&term=" + term; 

    $.getJSON(url, function(data) { 
     $.each(data.items, function(item){ 
      $("<li>").text(item.title).appendTo("#playlist ul"); 
     }); 
    }); 

}); 

使用Chrome的開發者工具,我可以看到,我得到返回結果:

([{"title":"Episode 4: Title"},{"title":"Episode 3: Title"},{"title":"Episode 2: Title"},{"title":"Episode 1: Title"}]) 

但是,沒有在網頁上顯示?

我缺少的東西在這裏的關鍵?我新來處理JSON請求。

+0

哇! Thankyou所有的答案到目前爲止。我晚上回家後必須嘗試這些, – James

回答

0

您的網址是錯誤的,因此服務器響應缺少函數名。

的反應應該是這個樣子:

jQuery12345(yourJson) 

但到了錯誤的URL有sended服務器(由jQuery的所產生的價值和服務器應該使用它作爲功能 - 用於jsoncallback沒有價值在響應名)


二者必選其一:

url = "includes/live_search.php?jsoncallback=?&term=" + term; 

(你缺少問號的jsoncallback)

<?php 
    //live_search.php 
    echo $_GET['jsoncallback'].'('.json_encode($someObject).')'; 
?> 

或者

url = "includes/live_search.php?term=" + term; 

(你不需要jsoncallback參數,它不是一個X域請求。讓我們用純JSON)服務器響應)

<?php 
    //live_search.php 
    echo json_encode($someObject); 
?> 

您$。每個(應該是這樣的:

$.each(data, function(index,item){ 
      $("<li>").text(item.title).appendTo("#playlist ul"); 
     }); 

(傳遞給回調的第一個參數是索引,不當前項目......會是怎樣的第二個參數)

+0

謝謝Dr.Mollle! – James

1

貌似data本身是一個數組:

([{"title":"Episode 
^-- array 

我不知道在哪裏括號來的,他們可能只是一個copy'n'paste的事情,所以我會忽略它們。

試試這個:

$.each(data, function(item){ 
    // ... 
+0

這看起來與他的代碼相同。你是否想要移除'.items'? –

+0

@kingjiv:是的,我現在有,你很快!你在解決我的錯誤時註釋了你的意見。 –

1

data.items似乎沒有被定義。如果你看看你的JSON,它僅僅是一個數組,而不是與items的對象。

+0

JSON不是數組,它不是JSON –

1

有兩件事情會在這裏的。首先是你的請求被格式化爲JSONP但live_search.php不填充與函數名的JSON輸出。這可能是因爲你沒有將「jsoncallback」參數設置爲「?」在你的請求。但是,由於您正在製作跨域請求(相同來源),因此您無需使用JSONP。您可以讓list_search.php返回常規JSON,而不使用外部函數填充。您可以打開live_search.php,刪除輸出$ _GET ['jsoncallback']變量以及周圍圓括號的代碼。輸出的結果應該是這樣的:

{"title":"Episode 4: Title"},{"title":"Episode 3: Title"},{"title":"Episode 2: Title"},{"title":"Episode 1: Title"} 

而且,你的$。每個迭代中缺少回調函數的第二個參數。請參閱jQuery.each()文檔。我還在下面提供了一個例子。

$("#ep_search").keydown(function() { 
    var term = $("#ep_search").val(); 
    url = "includes/live_search.php?term=" + term; 

    $.getJSON(url, function(data) { 
     $.each(data, function(idx, ele){ 
      $("<li />").text(ele.title).appendTo("#playlist ul"); 
     }); 
    }); 
});