Можно ли сделать запрос JSONP, который возвращает данные JSON через междоменный запрос, используя jQuery? - PullRequest
1 голос
/ 22 июня 2011

Я использую вызов 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. Кто-нибудь знает умный способ обработки возврата?

- Рошлер

1 Ответ

1 голос
/ 22 июня 2011

Это невозможно, извините. Лучше всего сделать страницу на вашем сервере для пересылки запроса.

...