Источник тока находится на GitHub и bower.
$ bower install jquery- serialize-object
Следующий код теперь устарел.
Следующий код может работать со всеми типами имен ввода; и обрабатывать их так, как вы ожидали.
Например:
// output { "honey":{ "badger":"a" }, "wombat":["b"], "hello":{ "panda":["c"] }, "animals":[ { "name":"d", "breed":"e" } ], "crazy":[ null, [ {"wonky":"f"} ] ], "dream":{ "as":{ "vividly":{ "as":{ "you":{ "can":"g" } } } } } }
Использование
$('#my-form').serializeObject();
Колдовство (JavaScript)
(function($){ $.fn.serializeObject = function(){ var self = this, json = {}, push_counters = {}, patterns = { "validate": /^[a-zA-Z][a-zA-Z0-9_]*(?:\[(?:\d*|[a-zA-Z0-9_]+)\])*$/, "key": /[a-zA-Z0-9_]+|(?=\[\])/g, "push": /^$/, "fixed": /^\d+$/, "named": /^[a-zA-Z0-9_]+$/ }; this.build = function(base, key, value){ base[key] = value; return base; }; this.push_counter = function(key){ if(push_counters[key] === undefined){ push_counters[key] = 0; } return push_counters[key]++; }; $.each($(this).serializeArray(), function(){ // skip invalid keys if(!patterns.validate.test(this.name)){ return; } var k, keys = this.name.match(patterns.key), merge = this.value, reverse_key = this.name; while((k = keys.pop()) !== undefined){ // adjust reverse_key reverse_key = reverse_key.replace(new RegExp("\\[" + k + "\\]$"), ''); // push if(k.match(patterns.push)){ merge = self.build([], self.push_counter(reverse_key), merge); } // fixed else if(k.match(patterns.fixed)){ merge = self.build([], k, merge); } // named else if(k.match(patterns.named)){ merge = self.build({}, k, merge); } } json = $.extend(true, json, merge); }); return json; }; })(jQuery);
Если для работы на 443/80 требуется маршрутизация вашего приложения, ваш кластер Kubernetes должен иметь развернутый внешний балансировщик нагрузки. Если его нет, трафик будет перенаправлен на порт узла входа.
См. - https://istio.io/docs/tasks/traffic-management/ingress/#determining-the-ingress-ip-and-ports (Определение входной IP и порты):
"Если установлено значение EXTERNAL-IP, в вашей среде есть внешний балансировщик нагрузки, который вы можете использовать для входного шлюза. Если значение EXTERNAL-IP равно ( или постоянно), ваша среда не обеспечивает внешний балансировщик нагрузки для входного шлюза. В этом случае вы можете получить доступ к шлюзу с помощью порта узла службы. "
Пример для моего голого экрана, Металлический экземпляр без внешнего балансировщика нагрузки:
[admin@master1 ~]$ kubectl get svc -n istio-system | grep istio-ingress istio-ingress LoadBalancer 10.114.107.196 <pending> 80:32400/TCP,443:31564/TCP 5d istio-ingressgateway LoadBalancer 10.99.1.148 <pending> 80:31380/TCP,443:31390/TCP,31400:31400/TCP 5d
Если вы развертываете веб-провайдера облачных вычислений, таких как IBM Bluemix (вероятно, AWS / Azure / etc.), у вас уже должна быть одна конфигурация. Если ваша конфигурация находится на голом, у вас, вероятно, нет настроенного балансира нагрузки.
Пример моего экземпляра Bluemix с внешним балансировщиком нагрузки:
λ kubectl get svc -n istio-system | grep istio-ingress istio-ingress LoadBalancer 172.21.26.25 123.45.67.195 80:32000/TCP,443:31694/TCP 6h istio-ingressgateway LoadBalancer 172.21.139.142 123.45.67.196 80:31380/TCP,443:31390/TCP,31400:31400/TCP 6h
У меня есть еще не вернулся, чтобы развернуть балансировщик нагрузки на голый металл, поэтому хотелось бы услышать, есть ли у кого-нибудь. Я кратко посмотрел на Металл, но не потратил много времени на это.