Я использую вызов jQuery Ajax для запроса междоменного URL, который возвращает простые данные JSON:
function getAlibrisSuggestions(theKeywords)
{
$.ajax(
{
url: "http://www.alibris.com/cgi-bin/complete?site=18640838&mtype=B&term=" + encodeURI(theKeywords),
dataType: 'jsonp',
type: "GET",
crossDomain: true,
/* None of these helped obviously since the return is not JSONP but JSON
complete: onSuggestionsFetched,
beforeSend: onBeforeSend,
success: onSuccess,
dataFilter: onDataFilter,
*/
});
}
Пример запроса URL:
http://www.alibris.com/cgi-bin/complete?site=18640838&mtype=B&term=book
Ответ JSON:
[
{"l": "BP", "v": "books llc"},
{"l": "BA", "v": "books time-life"},
{"l": "BA", "v": "books general"},
{"l": "BA", "v": "books sunset"},
{"l": "BP", "v": "books on demand"},
{"l": "BA", "v": "books golden"},
{"l": "BA", "v": "books scholastic"},
{"l": "BP", "v": "book jungle"},
{"l": "BA", "v": "books chronicle"},
{"l": "BP", "v": "booksurge publishing"}
]
Поскольку это междоменный домен, я должен использовать JSONP, чтобы избежать ошибок источника. Проблема, как вы можете видеть из ответа от этого URL, заключается в том, что возвращаемое значение представляет собой обычный JSON. Поскольку он не отформатирован как Javascript, он приводит к тому, что jQuery возвращает состояние результата «parsererror» и ожидаемый «ресурс», интерпретируемый как сценарий, но передаваемый как предупреждение типа MIME text / plain »в консоли Chrome.
У меня нет контроля над сторонним сервером. Я хотел бы избежать включения вызова в сценарий на стороне сервера, просто чтобы преобразовать возвращаемый объект в Javascript. Кто-нибудь знает умный способ обработки возврата?
- Рошлер