2011-08-12 35 views
1

我遇到了一個問題,當我提交一個包含X個選定內容的表單時,我的代碼會掛起。我的表單是自動生成的,取決於用戶輸入。當在表單中選擇少量數據時,提交數據並沒有問題,並且我的cgi腳本運行良好。看起來,當數組'params'大於124項時,代碼會掛起並永不加載。將表單從jquery提交到cgi時出現問題

\$('#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可以處理的最大數量的參數?任何想法可能是錯的?我沒有考慮過的東西?

感謝

順便說一句,被調用的CGI腳本被在同一頁的形式加載,只是下面。

+0

爲什麼你逃脫所有的美元符號? – Tom

+0

它在一個字符串中。我的JavaScript是cgi生成的。 – monkeyyy

回答

1

我知道不同的Web服務器有不同的URL長度,但它們通常是2-6,000個字符。

這是事情 - 如果發送到服務器的數據應該存儲在某個地方,您可能應該將其作爲POST請求。 POST將更加穩健地處理大型數據集,因爲表單數據會進入請求主體。更重要的是,GET請求應該是冪等的 - 一遍又一遍地提交相同的請求應該總是產生相同的結果,並且不應該在別處改變任何東西。如果這個請求不是這樣,它應該是POST。

您可能想嘗試使用類似LiveHTTPHeaders(用於Firefox)或Fiddler來檢查實際發送的請求。將它與你期望的內容進行比較。

編輯:這裏試圖修改您的請求使用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生成的標記沒什麼大不了的使用適當的引號。)

編輯2:現在,點擊事件被捕獲並通過該處理器所消耗。

+0

它工作了一段時間...然後瀏覽器剛開始崩潰。 – monkeyyy

+0

你是什麼意思?瀏覽器是否凍結或實際終止? – Tom