2012-05-08 5 views
2

Я много читал и тестировал и не мог получить работу с JSONP JQuery Autocomplete с помощью службы REST, которую я создал.JSONP и JQUERY autocomplete

Вот мой 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 будет стандартный объект JSON, завернутый в функции обратного вызова

p({}); 

заданной через jsonpCallback = р к REST API?. Код javascript/html выполняется локально под сервером http://localhost:8888.

Для просмотра ответа данных мне нужно определить в моей функции Javascript «P» обратного вызова

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

Если я его ничего не работает, но то, что я не понимаю, почему JQuery Autocomplete пример кода работает в без какой-либо функции обратного вызова и, прежде всего, почему выпадающие результаты из автозаполнения не отображаются. Что я должен делать с функцией обратного вызова, чтобы сделать функцию автозаполнения вниз?

Спасибо всем, Daniele

+0

как я выполняю это? – Daniele

ответ

1

Я считаю, что JQuery будет автоматически добавлять jsonCallback =? когда тип данных «jsonp». Он использует случайное число в качестве имени функции обратного вызова, но в этом случае функция success: function выполняет функцию обратного вызова. Вы когда-либо называли вашу функцию p()? Это также не следует указывать. Это ссылка на функцию, а не строка.

Я оставил бы от этого:

data: { 
    jsonCallback : "p" 

Но это означает, что ваш сервис REST должны быть немного умнее и получить параметр CGI jsonCallback и использовать это значение в качестве функции оболочки для JSON.

UPDATE @Daniele

Re: "как я знаю, случайное имя 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, чтобы обернуть json в p-функцию. Это все еще не работает! – Daniele

+0

Я рекомендую, чтобы jQuery установил значение параметра jsonCallback, и для вас служба использовала это имя, а не p. –

+0

О, спасибо. Последнее, как узнать случайное имя, которое Jquery присваивает функции обратного вызова? – Daniele