我试过了:
$("#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>");
});
},
);
});
和
$("#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>");
});
},
);
});
答案 0 :(得分:5)
在$.getJSON
调用中没有用于添加标头的构造。您需要使用完整beforeSend
请求的$.ajax()
属性,或使用$.ajaxSetup()
将相同的beforeSend
属性应用于所有AJAX调用,无论使用何种jQuery方法创造它们。
另请注意,Access-Control-Allow-Origin
标头应放在响应中,而不是请求中。它对您发送的内容没有任何影响。
如果您试图避免某些浏览器中显示的CORS警告(建议使用Access-Control-Allow-Origin
标头),则需要将其添加到服务器端代码中。假设您无法访问服务器代码(因为您在这种情况下调用了Wikipedia)并且您收到了CORS错误,那么您无法通过JS代码调用该域。