ПРИМЕЧАНИЕ. Я просмотрел все сообщения на первых двух страницах результатов поиска Google, которые возвращаются, когда я ввожу свою ошибку в Google, и у меня все еще есть эта проблема. Кажется, что JavaScript OAuth мало освещается, потому что большая часть бизнеса OAuth происходит на серверной части.
Я пытаюсь сделать запрос AJAX к API Yelp Phone Search. Я использую библиотеку JavaScript OAuth Марко Беттиоло. Я считаю, что у меня работает библиотека OAuth, но по какой-то причине, когда я пытаюсь сделать вызов, возвращаемый JSON говорит об ошибке «Неверная подпись». Ознакомьтесь с моим действующим проектом и убедитесь в этом сами. Вот мой проект на GitHub. Если вы хотите воспроизвести ошибку самостоятельно, перейдите в мой живой проект, откройте откройте консоль devtools, нажмите на тренажерный зал, чтобы появилось информационное окно, а затем нажмите там, где написано «Нажмите здесь, чтобы посмотреть фотографии». Как только вы нажмете на нее, приложение выполнит запрос AJAX и будет следить за консолью, потому что вы увидите сообщение об ошибке.
Любая помощь высоко ценится!
Вот соответствующий код. Я поместил соответствующий AJAX-код внутри обработчика onclick для ссылки на фотографии, которая находится в каждом информационном окне.
photoLink.onclick = function() {
// Modify phone number string so it's ready to be
// put into url for AJAX call to Yelp API
var phoneNumber = place.formatted_phone_number;
var re = /\D/gi;
phoneNumber = phoneNumber.replace(re, '');
var yelpURL = YELP_BASE_URL + phoneNumber;
var parameters = {
oauth_consumer_key: YELP_CONSUMER_KEY,
oauth_token: YELP_TOKEN,
oauth_nonce: generateNonce(),
oauth_timestamp: Math.floor(Date.now()/1000),
oauth_signature_method: 'HMAC-SHA1',
oauth_version : '1.0',
callback: 'cb' // This is crucial to include for jsonp implementation in
// AJAX or else the oauth-signature will be wrong.
};
var encodedSignature = oauthSignature.generate('GET',yelpURL, parameters, YELP_CONSUMER_SECRET, YELP_TOKEN_SECRET);
parameters.oauth_signature = encodedSignature;
var settings = {
url: yelpURL,
data: parameters,
cache: true, // <---- This is crucial to include as well to prevent jQuery from
// adding on a cache-buster parameter "_=23489489749837",
// invalidating our oauth-signature
dataType: 'jsonp',
success: function(results) {
// Do stuff with results
console.log(results);
},
fail: function() {
// Do stuff on fail
console.log('AJAX request has failed :(');
}
};
// Send AJAX request via jQuery library
$.ajax(settings);
};