Проблемы при отправке формы из jquery в cgi

1

У меня проблема, когда, когда я отправляю форму с X количеством выбранных вещей, мой код зависает. Моя форма автоматически генерируется и зависит от пользовательских входов. Когда в форме отображается небольшое количество данных, нет проблем с отправкой данных, и мой скрипт cgi работает нормально. Кажется, когда массив "params" получает больше 124 элементов, код зависает и никогда не загружается.

\$('#HTML_EXECUTE_BUTTON').click(function() {

                 \$("#prog").html("<h2>WORKING - <img src='./lib/jqueryui_start/development-bundle/themes/base/images/ui-anim_basic_16x16.gif'> </h2>");

                 var params  = \$("#mec_html_step_B_inputs").serializeArray();
                 var params1 = \$("#mec_html_step_C_inputs").serializeArray();
                 var params2 = \$("#mec_html_step_D_inputs").serializeArray();
                 var params3 = \$("#mec_html_step_A_inputs").serializeArray();

                 params = \$.merge(params, params1);
                 params = \$.merge(params, params2);
                 params = \$.merge(params, params3);

                 params.push({ name: 'menu_mode', value: '5' });
                 params.push({ name: 'mode', value : '$mode'});
                params.push({ name: 'modetype', value: '$GLOBAL_MQA_MODE' });

                 \$("#HTML_EXECUTE_BUTTON").css("background-color","");

                    my_window = window.open("", "DEBUG WINDOW", "status=1,width=350,height=150"); //for debugging
                    my_window.document.write(dump(params)); //for debugging
                    alert(params.length); // for debugging


                 \$.get("./cgi_scripts/$GLOB_SCRIPT_NAME",params , function(data) { 
                    \$("#grapharea").html(data);
                    \$("#prog").html(" ");
                 });
            });

Существует ли ограничение размера символа/параметра для функции $.get()? Я отлаживал столько, сколько могу, и это моя последняя область, где я думаю, что это может пойти не так. Если не существует максимального количества параметров, которые может обрабатывать CGI.pm? любые мысли о том, что может быть неправильным? что я не рассматривал?

благодаря

Btw, вызываемый скрипт cgi загружается на ту же страницу, что и форма, только под ней.

  • 0
    Почему вы избегаете всех своих знаков доллара?
  • 0
    это в строке. мой javascript генерируется cgi.
Теги:

1 ответ

1

Я знаю, что разные веб-серверы имеют разные длины URL-адресов, но часто они составляют порядка 2-6 000 символов.

Здесь вещь - если данные, отправляемые на сервер, должны быть где-то сохранены, вероятно, вы должны сделать это POST-запрос. POST будет обрабатывать большие наборы данных гораздо более надежно, потому что данные формы поступают в тело запроса. Что еще более важно, запросы GET должны быть идемпотентными - повторение одного и того же запроса снова и снова должно давать одинаковые результаты и не должно ничего менять в другом месте. Если этот запрос не такой, он должен быть POST.

Вы можете попробовать использовать что-то вроде LiveHTTPHeaders (для Firefox) или Fiddler, чтобы проверить отправленный запрос. Сравните это с тем, что вы ожидаете, должны быть отправлены.

EDIT: Здесь попытка изменить ваш запрос на использование POST. Основываясь на моем беглом взгляде на документы jq, похоже, что вы можете положиться на jq, чтобы автоматически сериализовать ваши массивы для вас.

\$('#HTML_EXECUTE_BUTTON').click(function(event) {

    \$("#prog").html('<h2>WORKING - <img src="./lib/jqueryui_start/development-bundle/themes/base/images/ui-anim_basic_16x16.gif" /> </h2>');

    var params  = \$("#mec_html_step_B_inputs").serializeArray();
    var params1 = \$("#mec_html_step_C_inputs").serializeArray();
    var params2 = \$("#mec_html_step_D_inputs").serializeArray();
    var params3 = \$("#mec_html_step_A_inputs").serializeArray();

    params = \$.merge(params, params1);
    params = \$.merge(params, params2);
    params = \$.merge(params, params3);

    params.push({ name: 'menu_mode', value: '5' });
    params.push({ name: 'mode', value : '\$mode'});
    params.push({ name: 'modetype', value: '\$GLOBAL_MQA_MODE' });

    \$("#HTML_EXECUTE_BUTTON").css("background-color","");

        my_window = window.open("", "DEBUG WINDOW", "status=1,width=350,height=150"); //for debugging
        my_window.document.write(dump(params)); //for debugging
        alert(params.length); // for debugging

    jQuery.ajax({
        url: './cgi_scripts/$GLOB_SCRIPT_NAME',
        type: 'POST',
        data: params,
        error: function(jXHR, sStatus, eError) {
            // react to failures
        },
        success: function(data, textStatus, jqXHR) {
            // react to success
            \$("#grapharea").html(data);
            \$("#prog").html(" ");
        }
    });
    event.preventDefault();
    return false;
});

(Я также изменил ваше поколение HTML, чтобы использовать правильные кавычки в разметке. Нет biggie.)

EDIT 2: теперь щелчок события захватывается и потребляется этим обработчиком.

  • 0
    Это работало некоторое время ... затем браузеры только начали падать.
  • 0
    Что вы имеете в виду? Браузер завис или действительно завершился?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню