2016-11-13 6 views
0

Код приведен ниже, непосредственно взятый из примера автозаполнения jqueryui. Единственное изменение заключается в том, что он собирает JSONP с моего собственного сайта, за исключением того, что он ничего не делает, кроме того, что остался на маленьком spinner, ища ответ.jqueryui autocomplete не работает/работает в зависимости от домена, идентичного JSONP, от - почему?

$("#birds").autocomplete({ 
    source: function(request, response) { 
    $.ajax({ 
     url: "http://www.galaxygraphics.co.uk/fresnius_jsonp.php", 
     dataType: "jsonp", 
     data: { 
     term: request.term 
     }, 
     success: function(data) { 
     response(data); 
     } 
    }); 
    }, 
    minLength: 3, 
    select: function(event, ui) { 
    log("Selected: " + ui.item.value + " aka " + ui.item.id); 
    } 
}); 

Если изменить источник JSONP к

URL: "https://jqueryui.com/resources/demos/autocomplete/search.php",

..то это все работает нормально. Итак, вопрос в том, что отличается JSONP от JSONP в примере jqueryUI и JSONP моей собственной страницы? Оба они выполняются как текстовый/html-тип mime, и я не вижу различий вообще ни на странице, как отображается, ни на данных, ни на источнике, ни на заголовках.

https://jqueryui.com/resources/demos/autocomplete/search.php, = ОК http://www.ggfxserve.co.uk/fresnius/fresnius_jsonp.php, = не в порядке, хотя идентичны.

Если вы хотите проверить с формой автозаполнения, чтобы увидеть его в действии (или нет): -

http://www.ggfxserve.co.uk/fresnius/autocomplete.html = рабочее http://www.ggfxserve.co.uk/fresnius/autocomplete2.html = не работает. Введите «com» ​​либо для того, чтобы запустить их, пытаясь автозаполнять.

ответ

1

Вы не можете жестко закодировать обратный вызов в php, если вы не оговариваете, что именно в запросе.

Вы выводя jQuery1124009416418827878958_1479031851542() в PHP, когда открыты непосредственно в браузере, но это имя динамически генерироваться на основе меток времени во время фактического запроса

Норма выхода JSONP будет использовать $_GET['callback'] и JQuery добавляет параметры запроса в url автоматически, когда вы устанавливаете dataType как jsonp.

В своем демоверсии в браузере Dev Tools Network, чтобы увидеть URL, используемый для подтверждения.

Так что ваш очень простой код PHP будет выглядеть как

echo $_GET['callback'] . '(' . json_encode($output) .')'; 

Я хотел бы предложить вам реализовать CORS вместо этого и затем полагаться только на JSON обслуживается.

Недостаток использования JSONP является то запрос скрипта не XMLHttpRequest и имеет ограничение по обработке ошибок

+0

Спасибо, что решает эту проблему. Я не могу сказать достаточно благодарности - как вы могли догадаться, из того, что я сделал, я блуждаю по областям, которые я не очень хорошо знаю, и ваш ответ спас мне массу времени. – galaxyg