NullPointerException
s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException
. Они наиболее распространены, но другие способы перечислены на странице NullPointerException
javadoc.
Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException
, be:
public class Example {
public static void main(String[] args) {
Object obj = null;
obj.hashCode();
}
}
В первой строке внутри main
я явно устанавливаю ссылку Object
obj
равной null
. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException
, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.
(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)
Заголовки CORS отправляются на ALLOW запрашивающий скрипт для доступа к содержимому.
Википедия отправляет CORS, а не YOU.
На странице, которую вы указали:
API MediaWiki также требует, чтобы источник был предоставлен в качестве параметра запроса, соответствующим образом названного «origin», который сопоставляется с заголовком Origin, требуемым протоколом CORS. Обратите внимание, что этот заголовок должен быть включен в любой запрос перед полетом и поэтому должен быть включен в часть строки запроса URI запроса даже для запросов POST.
Если проверка происхождения CORS проходит, MediaWiki будет включать в ответном ответе: «Ответ на запрос прав доступа: истинный заголовок», поэтому могут быть отправлены файлы cookie аутентификации.
blockquote>Это означает, что вы должны отправить заголовок
Origin
, чтобы сообщить wikipedia, где вы находитесь приходящий из.Отправить этот исходный заголовок:
xhr.setRequestHeader("Origin", "http://www.yourpage.com");
Access-Control-Allow-*
заголовки - это заголовки ответов, а не заголовки запросов.Википедии дополнительно требуется тип содержимого json:
xhr.setRequestHeader("Content-Type", "application/json; charset=UTF-8");
На сегодняшний день Wikipedia поддерживает запросы CORS, используя обычные запросы ajax (нет необходимости в обработке JSONP / обратного вызова). Это можно сделать, установив начало в вызове API. Для аутентифицированных запросов это должно соответствовать точно одному из «истоков» в заголовке Origin (вам нужно установить это, используя свойство beforeSend при вызове ajax). Для неавторизованных запросов вы можете просто установить его как звездочку (*), и она работает при использовании простого $ .getJSON из вашего домена. Пример api call: https://en.wikipedia.org//w/api.php?action=opensearch&format=json&origin=*&search=stack&limit=10
Больше в изолированной программной среде MediaWiki API: Песочница MediaWiki API
Вы можете использовать jQuery JSONP:
$.ajax( {
url: "https://en.wikipedia.org/w/api.php",
jsonp: "callback",
dataType: 'jsonp',
data: {
action: "query",
list: "search",
srsearch: "javascript",
format: "json"
},
xhrFields: { withCredentials: true },
success: function(response) { ... }
}
У меня была такая же проблема, работая над проектом freeCodeCamp, и решение было настолько простым, что я смеялся, так как я часами искал его. в вашем jquery url включите параметр ниже.
& amp; origin = *
$.getJSON("https://en.wikipedia.org/w/api.php?action=query&format=json&gsrlimit=15&generator=search&origin=*&gsrsearch=" + q, function(data){