в файле манифеста устанавливает второе действие parentActivityName как первое действие и удаляет параметр screenOrientation во второе действие. это означает, что ваша первая деятельность является родителем и решит ориентацию вашего второго занятия.
<activity
android:name=".view.FirstActiviy"
android:screenOrientation="portrait"
android:theme="@style/AppTheme" />
<activity
android:name=".view.SecondActivity"
android:parentActivityName=".view.FirstActiviy"
android:theme="@style/AppTheme.Transparent" />
Новые способы I: fetch
TL; DR Я бы рекомендовал этот способ, пока вам не нужно отправлять синхронные запросы или поддерживать старые браузеры.
До тех пор, пока ваш запрос будет асинхронным, вы можете использовать Fetch API для отправки HTTP-запросов. API-интерфейс fetch работает с обещаниями , что является хорошим способом обработки асинхронных рабочих процессов в JavaScript. С помощью этого подхода вы используете fetch()
для отправки запроса и ResponseBody.json()
для разбора ответа:
fetch(url)
.then(function(response) {
return response.json();
})
.then(function(jsonResponse) {
// do something with jsonResponse
});
Совместимость: API-интерфейс Fetch не поддерживается IE11, а также Edge 12 & amp ; 13. Однако существуют полиполны .
Новые способы II: responseType
Поскольку Londeren имеет написанный в его ответе , более новые браузеры позволяют использовать свойство responseType
для определения ожидаемого формата ответа. Доступ к анализируемым откликам можно получить через свойство response
:
var req = new XMLHttpRequest();
req.responseType = 'json';
req.open('GET', url, true);
req.onload = function() {
var jsonResponse = req.response;
// do something with jsonResponse
};
req.send(null);
Совместимость: responseType = 'json'
не поддерживается IE11.
Классический способ
Стандартный XMLHttpRequest не имеет свойства responseJSON
, только responseText
и responseXML
. До тех пор, пока биттово действительно отвечает некоторым JSON на ваш запрос, responseText
должен содержать код JSON в виде текста, поэтому все, что вам нужно сделать, это разобрать его с помощью JSON.parse()
:
var req = new XMLHttpRequest();
req.overrideMimeType("application/json");
req.open('GET', url, true);
req.onload = function() {
var jsonResponse = JSON.parse(req.responseText);
// do something with jsonResponse
};
req.send(null);
Совместимость: этот подход должен работать с любым браузером, который поддерживает XMLHttpRequest
и JSON
.
JSONHttpRequest
Если вы предпочитаете использовать responseJSON
, но вы хотите получить более легкое решение, чем JQuery, вы можете проверить мой JSONHttpRequest. Он работает точно так же, как и обычный XMLHttpRequest, но также предоставляет свойство responseJSON
. Все, что вам нужно изменить в вашем коде, будет первой строкой:
var req = new JSONHttpRequest();
JSONHttpRequest также предоставляет функции для простой отправки объектов JavaScript как JSON. Более подробно и код можно найти здесь: http://pixelsvsbytes.com/2011/12/teach-your-xmlhttprequest-some-json/ .
Полное раскрытие: я являюсь владельцем Pixels | Bytes. Я думаю, что мой сценарий - хорошее решение проблемы, поэтому я разместил его здесь. Пожалуйста, оставьте комментарий, если вы хотите, чтобы я удалил ссылку.
Используйте nsIJSON , если это для расширения FF:
var req = new XMLHttpRequest;
req.overrideMimeType("application/json");
req.open('GET', BITLY_CREATE_API + encodeURIComponent(url) + BITLY_API_LOGIN, true);
var target = this;
req.onload = function() {target.parseJSON(req, url)};
req.send(null);
parseJSON: function(req, url) {
if (req.status == 200) {
var jsonResponse = Components.classes["@mozilla.org/dom/json;1"]
.createInstance(Components.interfaces.nsIJSON.decode(req.responseText);
var bitlyUrl = jsonResponse.results[url].shortUrl;
}
Для веб-страницы просто используйте JSON.parse
вместо Components.classes["@mozilla.org/dom/json;1"].createInstance(Components.interfaces.nsIJSON.decode
Примечание: я тестировал это только в Chrome.
добавляет функцию прототипа в XMLHttpRequest .. XHR2,
в XHR 1, вам, вероятно, просто нужно заменить this.response
с this.responseText
Object.defineProperty(XMLHttpRequest.prototype,'responseJSON',{value:function(){
return JSON.parse(this.response);
},writable:false,enumerable:false});
, чтобы вернуть json в xhr2
xhr.onload=function(){
console.log(this.responseJSON());
}
EDIT
Если вы планируете использовать XHR с arraybuffer
или другие типы ответов, тогда вы должны проверить, является ли ответ string
.
в любом случае вам нужно добавить дополнительные проверки, например если он не может разобрать json.
Object.defineProperty(XMLHttpRequest.prototype,'responseJSON',{value:function(){
return (typeof this.response==='string'?JSON.parse(this.response):this.response);
},writable:false,enumerable:false});
Вы можете просто установить xhr.responseType = 'json';
const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://jsonplaceholder.typicode.com/posts/1');
xhr.responseType = 'json';
xhr.onload = function(e) {
if (this.status == 200) {
console.log('response', this.response); // JSON response
}
};
xhr.send();
Я думаю, вы должны включить jQuery для использования responseJSON
.
Без jQuery вы можете попробовать с responseText и попробовать, как eval("("+req.responseText+")");
UPDATE: Пожалуйста, прочитайте комментарий относительно eval
, вы можете протестировать с помощью eval, но не использовать его в рабочем расширении.
ИЛИ
использовать json_parse : он не использует eval