-1

getSomethingWithAjax を使用して送信されたデータにはブラウザーの制限があります。大きなデータを投稿したい場合、 getSomethingWithAjax() を代用するものは何でしょうか? ここに私のコードがあります: このコードは textarea でテキスト ファイルを開き、ユーザーが文字を入力または削除できるようにします。約 2800 文字を超える送信には制限があります。

  <%
 if(request.getParameter("thetext") != null) {
     File savedHere = new File(request.getParameter("filepath"));
     FileOutputStream out2 = new FileOutputStream(savedHere);
     PrintStream p = new PrintStream(out2);

     try {
        boolean gotError = false;

        if(request.getParameter("revert").equals("1")) {
        System.out.println("In revert");
        p.print(request.getParameter("thetextRev").replace("\r",""));
        gotError = p.checkError();
        p.close();
    } else {
        System.out.println("NOT in   revert\n"+request.getParameter("thetext"));
        p.print(request.getParameter("thetext").replace("\r",""));
        gotError = p.checkError();
        p.close();
    }

    if(request.getParameter("revert").equals("0")) {
        if(!gotError) {
            out.println("File was successfully modified");
        } else {
            out.println("Error while writing the file");
        }
    }
}
     catch(Exception ex) {
      System.out.println("Exception while trying to write out to file");
      out.println("There was an error while writing file");
    }
 }

 String filename = "";
 java.lang.StringBuffer myStuff = new java.lang.StringBuffer(100000);

 if(request.getParameter("STEP")!=null
    && request.getParameter("secret")!=null
    && !request.getParameter("secret").equals("yes")) {

   filename = request.getParameter("autoFiles");
   File chosenFile = new File(filename);
   DataInputStream dis = new DataInputStream(new FileInputStream (chosenFile));
   String data = null;

    while((data = dis.readLine()) != null) {   
    myStuff.append(data+"\n");
    }

    //this is just to check capacity and current length of file
    out.println("Capacity is:"+ myStuff.capacity()+ "characeter count is" +  
    myStuff.length());
  %>

  <br>

  <form method="POST" class="example" action="/jsp/EditText.jsp" id=form2>
  <input type=hidden name=filepath value="<%=filename%>">
  <input type=hidden name=revert id=revert value="0">
  <input type=hidden name=textarea value=true>
  <br>
  <center>
  <textarea class="form-textarea resizable" id="textarea" style="width:90%;height:27em;

  font-family:courier;font-size:14;"
    name="thetext"><%=myStuff.toString()%></textarea>


   <div style="display:none;">
    <textarea id="textareaRev" style="width:90%;height:27em; font-family:courier;font- 

    size:14;"name="thetextRev"><%=myStuff.toString()%></textarea>
  </div>

  <br><br>

  <input type=button name=submit value="Save Changes"
   onClick="if(runOnSubmit(){ 
   getSomethingWithAjax('EditText.jsp'+
   getAllFormElementsAndMakeIntoURI(true),'','hereIsTheMainHeaderSpan',false,false);}">

    <input type=button name=submitRev value="Cancel/Exit"
    onClick="toggleTextRevert(); 

    getSomethingWithAjax('EditText.jsp','','hereIsTheMainHeaderSpan')">
  <%
  } else {
  //initial part here, not relevant 

  /*
  this part sorts a list of files located in a specific directory in a   
  dropdown menu Auto files is the generated files from the dropdown menu
  */

  }
  %>
4

1 に答える 1

0

ブラウザに依存しない Ajax の実行方法を探していると仮定すると、私が少し前に考え出した例を以下に示します。

この関数のペアは、JavaScript 同期ポスト リクエストを処理します。その鍵は jsxml_open_request 関数にあります。ブラウザの JavaScript サポートで何が利用できるかを調べ、リクエスト オブジェクトをインスタンス化します。

3 番目の関数は示されていませんが、その関数は「parse_returned_xml」です。投稿されたリクエストに対する「回答」とともにサイトから返された XML メッセージを処理します。

// -----------------------------------------------------------------------------
// This function will handle the mechanics of posting a synchronous XMLHttpRequest 
// and will return a result array. It uses a helper function "jsxml_open_request".
//  Return array is:
//
//     [ status, errMsg, xmlData ]
//
// If there is no error, 'errMsg' is null. Status values are:
//
//     -1  = Failed early in XMLHttpRequest init
//      0  = Failed after XMLHttpRequest init
//      1  = Success, xmlData is populated
//
// -----------------------------------------------------------------------------
function jsxml_process_post_request(postVarList, postTargetPage)
{
    var xmlParser = false;
    var gobjDatabaseDom = null;
    var xmlData = null;
    var xmlParseStep = 0;
    var requestObject = null;
    var i = 0;
    var postKey = '';
    var postValue = '';

    oRetArray = jsxml_open_request(postVarList, postTargetPage);
    if (oRetArray[0] != 1) {
       return( new Array(oRetArray[0], oRetArray[1], null) );
    }
    parameters = oRetArray[2];
    requestObject = oRetArray[3];

    requestObject.send(parameters);
    if (requestObject.status != 200) {
       return( new Array(0, requestObject.statusText, null) );
    }

    xmlRetArray = parse_returned_xml(postVarList, requestObject.responseText);
    if (xmlRetArray[0] != 1) {
       return( new Array(xmlRetArray[0], xmlRetArray[1], null) );
    }

    return( new Array(1, null, xmlRetArray[2]) );
}

function jsxml_open_request(postVarList, postTargetPage)
{
    var requestObject = null;
    var i = 0;
    var postKey = '';
    var postValue = '';

    // Browser select code.
    if(window.XMLHttpRequest) // branch for native XMLHttpRequest object
    {
       try {
         requestObject = new XMLHttpRequest();
       } catch(e) {
         requestObject = null;
       }
    } 
    else if(window.ActiveXObject) // branch for IE/Windows ActiveX version
    {
       try {
         requestObject = new ActiveXObject("Msxml2.XMLHTTP");
       } 
       catch(e) 
       {
         try {
           requestObject = new ActiveXObject("Microsoft.XMLHTTP");
         } 
         catch(e) {
           requestObject = null;
         }
       }
    }

    if (requestObject == null) {
       return( new Array(-1, 'Could not do new on XMLHttpRequest.', null, null) );
    }

    // Assemble the paramter list
    parameters = '';
    for(i = 0; i < postVarList.length; i++)
    {
       postKey = postVarList[i][0];
       postValue = postVarList[i][1];

       if (parameters.length == 0) {
          parameters = postKey + '=' + postValue;
       }
       else {
          parameters = parameters + '&' + postKey + '=' + postValue;
       }
    }

    // Prepare the post request.
    requestObject.open("POST", postTargetPage, false);
    requestObject.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    requestObject.setRequestHeader('Accept', 'text/plain');
    return( new Array(1, 'Success.', parameters, requestObject) );
}
于 2012-12-12T22:00:29.523 に答える