我正在使用 select2 插件连接 LinkedIn 的公司搜索 API。我需要的是让它与 jsonp 一起工作,这样我就可以避免使用常规 json 请求时出现的“Access-Control-Allow-Origin”错误[我已经确认当我禁用默认安全设置时 json 请求有效在 Chrome 中。]。“工作”是指我希望 jsonp 请求 url 像 json 请求 url 一样对我进行身份验证,但我继续收到 401 未经授权的错误。
我认为我的问题在于 jsonp 设置的 url 中的“回调”参数。例如,由 json 创建的经过 LinkedIn 身份验证的公司搜索 url 是:
使用 jsonp 它类似于:
唯一明显的区别是“callback=jQuery...”参数。这是我的 JavaScript:
function generateUrl(term) {
(function ($) {
var apiKey = 'xxx';
var apiSecret = 'xxx';
var memberToken = 'xxx';
var memberSecret = 'xxx';
var action = 'GET';
var path = 'http://api.linkedin.com/v1/company-search';
var nonce = '1234';
var timestamp = Math.floor((new Date()).getTime()/1000);
var version = '1.0';
var args = "keywords=" + term;
// var format = 'json';
if (args != '') { args += '&'; }
args += "&oauth_nonce=" + nonce + "&oauth_timestamp=" + timestamp + "&oauth_version=" + version;
OAuthSimple().reset();
this.results = (new OAuthSimple()).sign({
path:path,
action:action,
parameters:args,
signatures:{
'consumer_key':apiKey, 'shared_secret': apiSecret,
'access_token':memberToken,'access_secret':memberSecret}
}
);
}
(jQuery));
return results.signed_url.slice(results.signed_url.indexOf('?') + 1);
}
$("#linkedin").select2({
placeholder: "Search for a company.",
minimumInputLength: 1,
allowClear: true,
ajax: {
url: 'http://api.linkedin.com/v1/company-search',
dataType: 'jsonp',
data: function (term, page) {
return generateUrl(term);
},
results: function (data, page) {
return { results: data.companies.values };
}
},
formatResult: companyFormatResult,
formatSelection: companyFormatSelection,
dropdownCssClass: "bigdrop_3"
});
function companyFormatResult(company) {
return company.name;
}
function companyFormatSelection(company) {
return company.name;
}
它可能与我的 url 参数的语法有关吗?当“关键字”参数不是在“公司搜索”之后立即出现时,我遇到了问题?在普通的 json 请求中,但是将 jsonp 请求中的回调参数移动到 url 的末尾似乎没有帮助。
先感谢您。