我试过了:
$("#wiki").on('click', function(e) {
var q = $(this).data('subject');
$.getJSON("https://it.wikipedia.org/w/api.php?gsrnamespace=0&gsrsearch=test&gsrlimit=10&prop=pageimages|extracts&pilimit=max&exintro&explaintext&exsentences=1&exlimit=max?callback=?", {
srsearch: q,
action: "query",
list: "search",
prop: "text",
section: 0,
format: "json"
}, function(data) {
headers: {
"Accept" : "application/json; charset=utf-8",
"Content-Type": "application/javascript; charset=utf-8",
"Access-Control-Allow-Origin" : "*"
},
$("#results").empty();
$("#results").append("<p>Results for <b>" + q + "</b></p>");
$.each(data.query.search, function(i, item) {
$("#results").append("<div><a href='http://it.wikipedia.org/wiki/" + encodeURIComponent(item.title) + "'>" + item.title + "</a><br>" + item.snippet + "<br><br></div>");
});
},
);
});
Run Code Online (Sandbox Code Playgroud)
和
$("#wiki").on('click', function(e) {
var q = $(this).data('subject');
$.getJSON("https://it.wikipedia.org/w/api.php?gsrnamespace=0&gsrsearch=test&gsrlimit=10&prop=pageimages|extracts&pilimit=max&exintro&explaintext&exsentences=1&exlimit=max?callback=?", {
srsearch: q,
action: "query",
list: "search",
prop: "text",
section: 0,
format: "json"
},
headers: {
"Accept" : "application/json; charset=utf-8",
"Content-Type": "application/javascript; charset=utf-8",
"Access-Control-Allow-Origin" : "*"
},
function(data) {
$("#results").empty();
$("#results").append("<p>Results for <b>" + q + "</b></p>");
$.each(data.query.search, function(i, item) {
$("#results").append("<div><a href='http://it.wikipedia.org/wiki/" + encodeURIComponent(item.title) + "'>" + item.title + "</a><br>" + item.snippet + "<br><br></div>");
});
},
);
});
Run Code Online (Sandbox Code Playgroud)
没有构造可以在$.getJSON调用中添加标头.您需要使用beforeSend完整$.ajax()请求的属性,或者使用$.ajaxSetup()相同的beforeSend属性应用于所有AJAX调用,无论使用什么jQuery方法创建它们.
另请注意,Access-Control-Allow-Origin标头应放在响应中,而不是请求中.它对您发送的内容没有任何影响.
如果您试图避免某些浏览器中显示的CORS警告(建议使用Access-Control-Allow-Origin标头),则需要将其添加到服务器端代码中.假设您无法访问服务器代码(因为您在这种情况下调用了Wikipedia)并且您收到了CORS错误,那么您无法通过JS代码调用该域.