Вы можете использовать эту пользовательскую библиотеку (написанную с помощью Promise) для выполнения удаленного вызова.
function $http(apiConfig) {
return new Promise(function (resolve, reject) {
var client = new XMLHttpRequest();
client.open(apiConfig.method, apiConfig.url);
client.send();
client.onload = function () {
if (this.status >= 200 && this.status < 300) {
// Performs the function "resolve" when this.status is equal to 2xx.
// Your logic here.
resolve(this.response);
}
else {
// Performs the function "reject" when this.status is different than 2xx.
reject(this.statusText);
}
};
client.onerror = function () {
reject(this.statusText);
};
});
}
Пример простого использования:
$http({
method: 'get',
url: 'google.com'
}).then(function(response) {
console.log(response);
}, function(error) {
console.log(error)
});
Проблема в том, что для json.load
вы должны передать файл как объект с определенной функцией read
. Поэтому либо вы используете json.load(reponse)
, либо json.loads(response.read())
.
Если вы получаете такую ошибку python, как это:
AttributeError: 'str' object has no attribute 'some_method'
Вы, вероятно, случайно отравили свой объект, перезаписав свой объект строкой.
Как воспроизвести эту ошибку в python с несколькими строками кода:
#!/usr/bin/env python
import json
def foobar(json):
msg = json.loads(json)
foobar('{"batman": "yes"}')
Запустите его, который печатает:
AttributeError: 'str' object has no attribute 'loads'
Но измените имя variablename, и он отлично работает:
#!/usr/bin/env python
import json
def foobar(jsonstring):
msg = json.loads(jsonstring)
foobar('{"batman": "yes"}')
Эта ошибка возникает, когда вы пытались запустить метод внутри строки. Строка имеет несколько методов, но не тот, который вы вызываете. Поэтому перестаньте пытаться вызвать метод, который String не определяет, и начать искать, где вы отравили ваш объект.
AttributeError("'str' object has no attribute 'read'",)
Это означает, что именно это говорит: что-то пыталось найти атрибут .read
для объекта, который вы ему дали, и вы дали ему объект типа str
(т. е. вы дали ему строку) .
Ошибка произошла здесь:
json.load (jsonofabitch)['data']['children']
Ну, вы нигде не ищете read
, поэтому это должно произойти в функции json.load
, которую вы вызывали ( как указано в полном обзоре). Это потому, что json.load
пытается .read
то, что вы ему дали, но вы дали ему jsonofabitch
, который в настоящее время называет строку (которую вы создали, вызвав .read
на response
).
Решение: не вызывайте .read
самостоятельно; функция будет делать это и ожидает, что вы дадите ему response
напрямую, чтобы он мог это сделать.
Вы могли бы также понять это, прочитав встроенную документацию Python для функции (попробуйте help(json.load)
или для всего модуля (попробуйте help(json)
) или проверите документацию для этих функций на http://docs.python.org .