2012-05-08 149 views
2

我一直在閱讀和測試很多關於它的問題,無法用我創建的REST服務獲得JQuery Autocomplete的JSONP工作。JSONP和JQUERY自動完成

這裏是我的javascript:

$("#input").autocomplete({ 
     source: function(request, response) { 
      $.ajax({ 
       url: "http://localhost:8080/Rest/api/suggest/", 
       dataType: "jsonp", 
       data: { 
        jsonpCallback : "p", 
        q: request.term 
       }, 
       success: function(data) { 

        response($.map(data.suggestions, function(item) { 
         return { 
          label: item.LABEL, 
          value: item.URI 
         } 
        })); 
       } 
      }); 
     }, 
     minLength: 2 
}); 

而且JSONP對象將被包裹在通過jsonpCallback = P的REST API給予

p({}); 

回調函數標準JSON對象? javascript/html代碼在http://localhost:8888服務器上本地運行。

要查看的數據反應,我需要在我的javascript的「P」回調函數

function p(data){ 
     alert(data.toSource()); 
    } 

定義如果我把它關閉沒有什麼作品,但我不明白的是,爲什麼JQuery Autocomplete示例代碼作品沒有任何回調函數,最重要的是爲什麼自動完成下拉結果不顯示。爲了使下拉自動完成功能有效,我應該怎樣處理回調函數?

謝謝大家, 丹尼爾

+0

如何執行呢? – Daniele

回答

1

我相信jQuery將自動追加jsonCallback =?當數據類型是'jsonp'時。它使用一個隨機數作爲回調函數名稱,但在這種情況下,success:函數用作回調函數。你的函數p()曾經被調用過嗎?它也不應該被引用。這是一個函數引用,而不是一個字符串。

我會離開關閉此:

data: { 
    jsonCallback : "p" 

但是,這將意味着你的REST服務將需要有點智慧和得到的jsonCallback CGI參數,並使用該值作爲函數包裝爲您的JSON。

UPDATE @Daniele

回覆: 「我怎麼知道隨機名稱的Jquery分配給回調函數?」

這將取決於您用於REST服務的編程語言。這裏有兩個例子,Perl和PHP:

#!/usr/bin/perl 
use CGI ":cgi"; 
$jsonCallback = $q->param('jsonCallback'); 
$json = ... 
print header(
    -type => 'application/json' 
); 

print $jsonCallback . '(' if $jsonCallback; 
print $json; 
print ')' if $jsonCallback 

PHP

<?php 
    $jsonCallback = $_GET['jsonCallback']; 
    $json = ... 
    echo $jsonCallback . '('; 
    echo $json; 
    echo ')'; 
    ?> 
+0

感謝您的回答,jsonCallback的確是我的API參數來包裝j功能中的json。它仍然不起作用! – Daniele

+0

我推薦的是讓jQuery設置jsonCallback參數的值,併爲你服務使用該名稱而不是p。 –

+0

哦,謝謝。最後一件事,我怎麼知道Jquery賦給回調函數的隨機名? – Daniele