Как закодировать строку запроса так, чтобы это было значение другой строки запроса в JavaScript?

Хорошо, я сначала начну с кода, а затем объясню его.

import request import json

def get_and_print_data(url):
        r = requests.get(url)
        info = r.json()
        for i in info['results']:
                print(i['name'])
        if info.get('next'):
                get_and_print_data(info['next'])

get_and_print_data("https://swapi.co/api/people/")

Код здесь довольно плохой, так как этот метод слишком много делает (получает данные, обрабатывает их, определяет, есть ли следующие страницы и печатает ли данные). Это слишком много логики только для одной функции, но для нашего примера это нормально.

Итак, обо всем по порядку, почему функция? Потому что нам нужно выполнять одни и те же действия (получать, обрабатывать и печатать данные) несколько раз. раз, по одному на страницу. Что меняется? URL, так как для каждой страницы есть разные URL. Таким образом, у нас будет URL в качестве параметра этой функции.

Следующие несколько строк взяты из вашего кода, так что Я предполагаю, что вы знакомы с ними. Тогда у нас есть эта важная строка: if info.get('next'):

В словарях вы обычно извлекаете данные с помощью dictionary[key], и это вызывает и исключение, если ключ не существует, называется KeyError . В этом случае мы должны были использовать попытку / кроме проверки наличия ключа next . Даже если это считается более «питоническим» способом, этот с «если» может быть легче понять.

Что тогда делает .get('next')? Ну, почти то же самое, но вместо броска и исключения он просто вернет None, если ключа нет, и помнит, что в Python None оценивается как ложное.

Короче говоря, это проверит, присутствует ли в вашем ответе ключ next (вы можете видеть, что API возвращает ноль для отсутствующих данных). Если ключ присутствует, мы будем вызывать ту же функцию с URL для следующей страницы и повторять до тех пор, пока в возвращенном JSON не будет отсутствовать (или будет отсутствовать) следующий ключ.

Конечно, нам нужно будет вызвать нашу функцию с начальным URL-адресом и продолжить с этого момента:)

Надеюсь, это поможет, и все легко понять!

49
задан Ilia Anastassov 1 November 2016 в 04:39
поделиться

2 ответа

encodeURIComponent будет работать. (Вы можете или не можете хотеть продвижение †˜? ’, в зависимости от того, что ожидает сценарий.)

var c= 'd e'
var query= '?a=b&c='+encodeURIComponent(c);
var uri= 'http://www.example.com/script?query='+encodeURIComponent(query);
window.location= uri;

Берет меня к:

http://www.example.com/script?query=%3Fa%3Db%26c%3Dd%2520e

, Когда Вы толпитесь, по которому это может казаться некогда декодируемым в строке состояния браузера, но Вы окажетесь в правильном месте.

Escape/неEscape () является неправильной вещью для кодирования параметров запроса, это понимает превратно символы Unicode и плюсы. Почти никогда нет случая, где Escape () - то, в чем Вы действительно нуждаетесь.

92
ответ дан bobince 7 November 2019 в 11:42
поделиться
javascript:alert(escape('?key=value1&key2=value2'));

Хорошо работает для меня?

-2
ответ дан Gary Green 7 November 2019 в 11:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: