Как мы отправляем, данные через ПОЛУЧАЮТ метод?

Вызовы функции

Функции являются просто типом Объекта.

Все Функциональные объекты имеют , вызов и применяется методы, которые выполняют Функциональный объект, к ним обращаются.

, Когда названо, первый аргумент этим методам определяет объект, на который сошлются this ключевое слово во время выполнения Функции - если это будет null или undefined, глобальный объект, window, используется для [1 112].

Таким образом, вызывая Функцию...

whereAmI = "window";

function foo()
{
    return "this is " + this.whereAmI + " with " + arguments.length + " + arguments";
}

... с круглыми скобками - foo() - эквивалентно [1 114] или foo.apply(undefined), который является эффективно то же как [1 116] или foo.apply(window).

>>> foo()
"this is window with 0 arguments"
>>> foo.call()
"this is window with 0 arguments"

Дополнительные аргументы [1 118] передаются как аргументы вызову функции, тогда как единственный дополнительный аргумент [1 119] может определить аргументы в пользу вызова функции как подобный Массиву объект.

Таким образом, foo(1, 2, 3) эквивалентно [1 121] или foo.apply(null, [1, 2, 3]).

>>> foo(1, 2, 3)
"this is window with 3 arguments"
>>> foo.apply(null, [1, 2, 3])
"this is window with 3 arguments"

, Если функция является свойством объекта...

var obj =
{
    whereAmI: "obj",
    foo: foo
};

... доступ к ссылке на Функцию через объект и вызов его с круглыми скобками - obj.foo() - эквивалентен [1 124] или foo.apply(obj).

Однако функции, сохраненные, поскольку, свойства объектов не "связываются" с теми объектами. Как Вы видите в определении obj выше, так как Функции являются просто типом Объекта, на них можно сослаться (и таким образом может быть передан в отношении Вызова функции или возвращен ссылкой из Вызова функции). То, когда ссылка на Функцию передается, никакая дополнительная информация о том, откуда она была передана [1 144], несут с ним, который является, почему следующее происходит:

>>> baz = obj.foo;
>>> baz();
"this is window with 0 arguments"

вызов к нашей Ссылке на функцию, baz, не обеспечивает контекста для вызова, таким образом, это - эффективно то же как [1 128], таким образом this заканчивает тем, что сослался window. Если мы хотим baz знать, что это принадлежит [1 132], мы должны так или иначе предоставить ту информацию, когда baz назван, который является, где первый аргумент [1 134] или apply и закрытия играет роль.

цепочки Объема

function bind(func, context)
{
    return function()
    {
        func.apply(context, arguments);
    };
}

, Когда Функция выполняется, она создает новый объем и имеет ссылку на любой объем включения. Когда анонимная функция создается в вышеупомянутом примере, она имеет ссылку на объем, в котором она была создана, который является bind объем. Это известно как "закрытие".

[global scope (window)] - whereAmI, foo, obj, baz
    |
    [bind scope] - func, context
        |
        [anonymous scope]

, Когда Вы пытаетесь получить доступ к переменной, эта "цепочка объема" обойдена для нахождения переменной с именем - если текущая область не содержит переменную, Вы смотрите на следующий объем в цепочке, и так далее пока Вы не достигаете глобальной области видимости. Когда анонимная функция возвращается и bind выполнение концов, анонимная функция все еще имеет ссылку на [1 138] объем, таким образом bind объем не "уходит".

, Учитывая все вышеупомянутое необходимо теперь быть в состоянии понять, как объем работает в следующем примере, и почему техника для того, чтобы раздать функцию "предварительно связала" с конкретным значением [1 140], это будет иметь, когда это назовут работами:

>>> baz = bind(obj.foo, obj);
>>> baz(1, 2);
"this is obj with 2 arguments"
7
задан Bohemian 4 December 2009 в 09:34
поделиться

3 ответа

Вызов Connection.setRequestProperty () установит заголовок запроса, что, вероятно, не то, что вы хотите делать в этом случае (если вы спросите меня, я думаю, что назову его setRequestHeader был бы лучшим выбором). Некоторые прокси-серверы могут удалять или переписывать имена нестандартных заголовков, поэтому вам лучше придерживаться соглашения о передаче данных в URL-адресе GET через параметры URL-адреса.

Лучший способ сделать это на BlackBerry - это используйте класс URLEncodedPostData для правильного кодирования параметров URL:

URLEncodedPostData data = new URLEncodedPostData("UTF-8", false);
data.append("method", "session.getToken");
data.append("developerKey", "value");
data.append("clientID", "value");
url = url + "?" + data.toString();
8
ответ дан 6 December 2019 в 12:52
поделиться

HTTP GET отправлять параметры данных в виде пар ключ / значение, закодированных в URL-адресе, например:

GET /example.html                      // without parameters
GET /example.html?Id=         1        // with one basic parameter
GET /example.html?Id=1&Name=John%20Doo // with two parameters, second encoded

Обратите внимание на следующие правила для разделителей символов:

? - split URL in two pieces: adddress to left and paremeters to right
& - must be used to separate on parameter from another

Вы должны знать свою платформу. функция кодирования строки. Javascript использует escape , C # использует HttpUtility.UrlEncode

6
ответ дан 6 December 2019 в 12:52
поделиться

Да, заголовки и свойства - это почти все, что вы можете отправить в GET. Кроме того, вы ограничены определенным количеством символов, которое зависит от браузера - я, кажется, припоминаю примерно 1024 или 2000 символов.

2
ответ дан 6 December 2019 в 12:52
поделиться
Другие вопросы по тегам:

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