繁体   English   中英

是否可以通过JSON通过跨域请求发出返回JSON数据的JSONP请求?

[英]Is it possible to make a JSONP request that gets back JSON data via a cross domain request using jQuery?

我正在使用jQuery Ajax调用来查询返回纯JSON数据的跨域URL:

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,
        */
        });
}    

示例网址请求:

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在Chrome的控制台中返回结果状态“ parsererror”和预期的“资源已解释为脚本但已传输为MIME类型文本/纯文本”的警告状态。

我无法控制外部服务器。 我想避免将调用包装在服务器端脚本中,只是为了将返回装扮成Javascript。 有谁知道能够处理退货的聪明方法?

-罗施勒

不可能,抱歉。 在您的服务器上制作一个页面以转发请求是您的最佳选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM