Я также разместил этот ответ в stackoverflow - Обработка ошибок в вызовах getJSON
Я знаю, что прошло какое-то время, так как кто-то ответил здесь, и плакат, вероятно, уже получил ответ от здесь или откуда-то еще. Однако я считаю, что этот пост поможет любому, кто ищет способ отслеживать ошибки и таймауты при выполнении запросов getJSON. Поэтому ниже моего ответа на вопрос
Структура getJSON выглядит следующим образом (см. http://api.jqueri.com ):
$(selector).getJSON(url,data,success(data,status,xhr))
большинство людей реализуют это с помощью
$.getJSON(url, datatosend, function(data){
//do something with the data
});
, где они используют url var для предоставления ссылки на данные JSON, datatosend как место для добавления "?callback=?"
и других переменных, которые должны быть отправлены для получения правильных данных JSON, а функция успеха - как функция обработки данных.
Однако вы можете добавить статус и переменные xhr в свою функцию успеха. Переменная состояния содержит одну из следующих строк: «success», «notmodified», «error», «timeout» или «parsererror», а переменная xhr содержит возвращаемый объект XMLHttpRequest (, найденный в w3schools ])
$.getJSON(url, datatosend, function(data, status, xhr){
if (status == "success"){
//do something with the data
}else if (status == "timeout"){
alert("Something is wrong with the connection");
}else if (status == "error" || status == "parsererror" ){
alert("An error occured");
}else{
alert("datatosend did not change");
}
});
Таким образом, легко отслеживать таймауты и ошибки, не создавая пользовательский трекер времени, который запускается после выполнения запроса.
Надеюсь, что это помогает кому-то по-прежнему искать ответ на этот вопрос.
В «вселенной операций перемещения» есть четыре возможности:
target source
is is left
----------------------------------------------------------
constructed <-- constructed // C++11 -- move construction
constructed <-- destructed
assigned <-- constructed // C++11 -- move assignment
assigned <-- destructed
Каждая из этих операций полезна ! std::vector<T>::insert
один может использовать первые три. Хотя обратите внимание:
X x1, x2;
if (sometimes)
{
x1 = std::move(x2);
}
// Is x2 moved-from here?
2-й и 4-й могут быть эмулированным 1-м и 3-м соответственно, просто вручную вызывая деструктор на источнике после операции.
1-й и 3-й имеют решающее значение. Алгоритмы типа std::swap
и std::sort
регулярно нуждаются в обеих этих операциях. Этим алгоритмам не нужно разрушать ни один из их входных объектов & mdash; только меняйте их значения.
Вооружившись этими знаниями, в период 2001-2002 гг. Я сосредоточил свои усилия на двух операциях, которые оставили свой исходный код созданным, потому что эти две операции оказали бы наибольшее (положительное) влияние на то, что тогда было C ++. 98. В то время я знал, что если я не сверну амбиции этого проекта, то он никогда не будет успешным. Даже ограниченный, он был слишком амбициозным, чтобы добиться успеха.
Это сокращение признано в первоначальном предложении семантики перемещения в разделе, озаглавленном «Семантика разрушительного движения».
В конце концов, мы просто отказались от этого как от слишком большой боли для недостаточной выгоды. Однако текущее предложение не запрещает семантику разрушительного перемещения в будущем. Это можно сделать в дополнение к семантике неразрушающего движения, описанной в этом предложении, если кто-то захочет нести этот факел.
Подробнее о том, что можно делать с перемещенным объектом, см. https://stackoverflow.com/a/7028318/576911
.