jQuery - получение $ _FILES массив с помощью $ .post

Поскольку объявления об объектной функции не найдено, я предполагаю, что ваша цель - максимизировать значение пакета в пределах возможностей пакета.

Пояснение: временная сложность исправлена. Оптимальное решение может заключаться не в заполнении максимально ценного предмета, вам нужно искать все возможные комбинации. Однако вы можете повторно использовать возможные оптимальные решения, которые вы искали, чтобы сэкономить место. Например, [5,5,3] получается путем добавления 3 к предыдущей попытке [5,5], чтобы промежуточный результат можно было «кэшировать». Вы можете использовать массив или набор для хранения возможных решений. Приведенный ниже код работает так же, как и код rosetta, но я думаю, что он понятнее.

Для дальнейшей оптимизации используйте приоритет, установленный для opts.

costs = [3,5,9]
value = [5,9,16]

volume = 130

# solutions
opts = set()
opts.add(tuple([0]))

# calc total value
cost_val = dict(zip(costs, value))

def total_value(opt):
    return sum([cost_val.get(cost,0) for cost in opt])

def possible_solutions():
    solutions = set()
    for opt in opts:
        for cost in costs:
            if cost + sum(opt) > volume:
                continue
            cnt = (volume - sum(opt)) // cost
            for _ in range(1, cnt + 1):
                sol = tuple(list(opt) + [cost] * _)
                solutions.add(sol)
    return solutions

def optimize_max_return(opts):
    if not opts:
        return tuple([])
    cur = list(opts)[0]
    for sol in opts:
        if total_value(sol) > total_value(cur):
            cur = sol
    return cur

while sum(optimize_max_return(opts)) <= volume - min(costs):
    opts = opts.union(possible_solutions())

print(optimize_max_return(opts))

Если ваше требование «просто наполни пакет», то будет проще использовать объем для каждого предмета.

6
задан Jason Sundram 10 September 2013 в 10:36
поделиться

4 ответа

форма jQuery является лучшим способом сделать это, можно добавить его к любой нормальной форме,

<form method="post" action="URL">
<input type="file" name="file">
<input type="text" name"text">
<input type="submit"> 
</form>

<script type="text/javascript">
$(document).ready(function() { 
  $(form).ajaxForm();
})
</script>

будет работать как ожидалось, но с ajax.

http://malsup.com/jquery/form/#code-samples

12
ответ дан 8 December 2019 в 04:32
поделиться

Вы не можете загрузить файлы через JavaScript.

Проверьте этот связанный вопрос:
Действительно ли возможно использовать Ajax, чтобы сделать загрузку файла?

По существу два самых популярных способа "фальсифицировать" Ajax для загрузок файла используют Флеш-плагин, такой как SWFUpload или отправляют форму скрытому iframe, который обрабатывает запрос.

11
ответ дан 8 December 2019 в 04:32
поделиться

Если можно управлять средой, как, скажем, Вы пишете приложение администрирования для интранет, в которой Вы рекомендуете браузер, то реальные загрузки файла Ajax возможны с Firefox 3 и выше. Во всех других случаях, iframe обходном решении или основанном на Flash загрузчике способ пойти.

0
ответ дан 8 December 2019 в 04:32
поделиться

Это возможно, но не работает в Google Chrome) Смотрите!

...
<form method='post' enctype='multipart/form-data'>
<input type="file" id="imf" name="imf"/>
<input type="button" id="Save"/>
</form>

...

$("#Save").live("click", function(){

var photo = document.getElementById("imf"); 
var file  = photo.files[0];

   $.post('/user/saveNewPhoto', {'imf':file.getAsDataURL(), fname:file.fileName }, function( data ){
   alert ( data );
    });

});

дополнительный сценарий загрузки требует декодирования base64) и все , но я не тестировал этот сценарий на файле большого размера

0
ответ дан 8 December 2019 в 04:32
поделиться
Другие вопросы по тегам:

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