javascript 第三个 XMLHttpRequest 被拒绝..但前两个允许?
javascript third XMLHttpRequest refused.. yet first two allowed?
我正在使用 Jquery 向 API 和 return 序列化数据发出请求。但是在第三次进行完全相同的调用后略有不同......我被拒绝并出现以下错误。
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:1337' is therefore not allowed access.
那我为什么允许前两次通过完全相同的方法访问 API?调用完全相同.. url 除了端点不同之外是相同的.. 除了我在同一个域上请求不同的端点之外,一切都是一样的。很明显,数据是如何处理的,但我从来没有达到那个程度。
这里我提出两个请求(或多或少,两种)
$('#keyInput_user_FORM').on('submit', function(e) {
e.preventDefault();
var APIKeyInput_user = document.getElementsByName("APIKeyInput_user")[0].value;
var accountAPI = baseAPI + versionAPI[1] + "/" + endpointAPI[0] + "?" + bearerAPI[0] + "=" + APIKeyInput_user;
$.getJSON( encodeURI(accountAPI), {
tagmode: "any",
format: "json"
}).done(function( data ) {
$.each( data.guilds, function( i, guilds ) {
var guildDetailsAPI = baseAPI + versionAPI[0] + "/" + endpointAPI[1] + "?" + bearerAPI[1] + "=" + guilds;
$.getJSON( encodeURI(guildDetailsAPI), {
tagmode: "any",
format: "json"
}).done(function( data ) {
$(".guildIdentifiers_coll ul").append('<li class="guildIdentifiers_indiv" id="'+data.guild_id+'"><div id="gw2embelm-div"></div><p>' + data.guild_name + '</p></li>');
});
});
});
});
这些是它正在调用的 url。
https://api.guildwars2.com/v2/account?access_token=EDCD27E4-3A1B-3C44-9C5B-99F062596A9BB1C9C824-AE01-4F6F-9EA9-CBAD2D721C9D
https://api.guildwars2.com/v1/guild_details.json?guild_name=Erasure%20of%20the%20mordant%20crescent
最后在这里我使用了完全相同的调用类型但被拒绝了(错误在顶部)
$.getJSON( encodeURI(bankAPI), {
tagmode: "any",
format: "json"
}).done(function( data ) {
$.each( data[0].inventory, function( i, inventory ) {
$(".bankResult .bankResult_DIV").append('<div class="bankInventory_item>'+inventory+'</div>"');
});
});
这就是上述代码中被拒绝的 url。
问题。为什么前两次都成功了还是被拒了..?
您的第二个 url 缺少必需的 'guild_id'。试试用这个代替。
更新
这是我用来测试您的 API 调用的片段。也许它会帮助你发现我遗漏的东西。
$(document).ready(function () {
var logResults = function (url, label) {
$.getJSON(encodeURI(url), {
tagmode: "any",
format: "json"
}).done(function (data) {
console.log('--------' + label + '--------');
console.log(url);
console.log(data);
});
};
var accountAPI ="https://api.guildwars2.com/v2/account" +
"?access_token=EDCD27E4-3A1B-3C44-9C5B-99F062596A9BB1C9C824-AE01-4F6F-9EA9-CBAD2D721C9D";
var secondUrl_notWorking = "https://api.guildwars2.com/v1/guild_details.json" +
"?guild_name=Erasure%20of%20the%20mordant%20crescent";
var secondUrl_working = "https://api.guildwars2.com/v1/guild_details.json" +
"?guild_id=927CDDD7-4E8D-E411-A8E7-AC162DAE5A05";
var bankAPI = 'https://api.guildwars2.com/v2/guild/927CDDD7-4E8D-E411-A8E7-AC162DAE5A05/stash' +
'?access_token=EDCD27E4-3A1B-3C44-9C5B-99F062596A9BB1C9C824-AE01-4F6F-9EA9-CBAD2D721C9D';
logResults(accountAPI, 'accountAPI');
logResults(secondUrl_notWorking, 'secondUrl_notWorking');
logResults(secondUrl_working, 'secondUrl_working');
logResults(bankAPI, 'bankAPI');
});
我正在使用 Jquery 向 API 和 return 序列化数据发出请求。但是在第三次进行完全相同的调用后略有不同......我被拒绝并出现以下错误。
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:1337' is therefore not allowed access.
那我为什么允许前两次通过完全相同的方法访问 API?调用完全相同.. url 除了端点不同之外是相同的.. 除了我在同一个域上请求不同的端点之外,一切都是一样的。很明显,数据是如何处理的,但我从来没有达到那个程度。
这里我提出两个请求(或多或少,两种)
$('#keyInput_user_FORM').on('submit', function(e) {
e.preventDefault();
var APIKeyInput_user = document.getElementsByName("APIKeyInput_user")[0].value;
var accountAPI = baseAPI + versionAPI[1] + "/" + endpointAPI[0] + "?" + bearerAPI[0] + "=" + APIKeyInput_user;
$.getJSON( encodeURI(accountAPI), {
tagmode: "any",
format: "json"
}).done(function( data ) {
$.each( data.guilds, function( i, guilds ) {
var guildDetailsAPI = baseAPI + versionAPI[0] + "/" + endpointAPI[1] + "?" + bearerAPI[1] + "=" + guilds;
$.getJSON( encodeURI(guildDetailsAPI), {
tagmode: "any",
format: "json"
}).done(function( data ) {
$(".guildIdentifiers_coll ul").append('<li class="guildIdentifiers_indiv" id="'+data.guild_id+'"><div id="gw2embelm-div"></div><p>' + data.guild_name + '</p></li>');
});
});
});
});
这些是它正在调用的 url。 https://api.guildwars2.com/v2/account?access_token=EDCD27E4-3A1B-3C44-9C5B-99F062596A9BB1C9C824-AE01-4F6F-9EA9-CBAD2D721C9D
https://api.guildwars2.com/v1/guild_details.json?guild_name=Erasure%20of%20the%20mordant%20crescent
最后在这里我使用了完全相同的调用类型但被拒绝了(错误在顶部)
$.getJSON( encodeURI(bankAPI), {
tagmode: "any",
format: "json"
}).done(function( data ) {
$.each( data[0].inventory, function( i, inventory ) {
$(".bankResult .bankResult_DIV").append('<div class="bankInventory_item>'+inventory+'</div>"');
});
});
这就是上述代码中被拒绝的 url。
问题。为什么前两次都成功了还是被拒了..?
您的第二个 url 缺少必需的 'guild_id'。试试用这个代替。
更新 这是我用来测试您的 API 调用的片段。也许它会帮助你发现我遗漏的东西。
$(document).ready(function () {
var logResults = function (url, label) {
$.getJSON(encodeURI(url), {
tagmode: "any",
format: "json"
}).done(function (data) {
console.log('--------' + label + '--------');
console.log(url);
console.log(data);
});
};
var accountAPI ="https://api.guildwars2.com/v2/account" +
"?access_token=EDCD27E4-3A1B-3C44-9C5B-99F062596A9BB1C9C824-AE01-4F6F-9EA9-CBAD2D721C9D";
var secondUrl_notWorking = "https://api.guildwars2.com/v1/guild_details.json" +
"?guild_name=Erasure%20of%20the%20mordant%20crescent";
var secondUrl_working = "https://api.guildwars2.com/v1/guild_details.json" +
"?guild_id=927CDDD7-4E8D-E411-A8E7-AC162DAE5A05";
var bankAPI = 'https://api.guildwars2.com/v2/guild/927CDDD7-4E8D-E411-A8E7-AC162DAE5A05/stash' +
'?access_token=EDCD27E4-3A1B-3C44-9C5B-99F062596A9BB1C9C824-AE01-4F6F-9EA9-CBAD2D721C9D';
logResults(accountAPI, 'accountAPI');
logResults(secondUrl_notWorking, 'secondUrl_notWorking');
logResults(secondUrl_working, 'secondUrl_working');
logResults(bankAPI, 'bankAPI');
});