2012-01-05 2 views
0

이유를 설명해주세요.자바 스크립트를 사용하여 POST를 통해 하나의 변수를 여러 번 보낼 수 있습니까?

http://www.test.ccom/process?item=1AAA&item=2BBB&item=3CCC

이 URL은 3 개 가지 항목을 추가합니다 (각 중 하나) 결과 페이지로,이 같은 :

나는 그 형식이 같은 다른 서버에 요청을 보낼 필요가 : 난 그냥 3 단 하나 개의 항목으로 추가하려는 경우

Item = 1AAA Count=1 
Item = 2BBB Count=1 
Item = 3CCC Count=1 

,이를 사용해야합니다

http://www.test.ccom/process?item=1AAA&item=1AAA&item=1AAA

그리고 결과 페이지는 다음과 같이 될 것입니다 :

Item = 1AAA Count=3 

내 문제는 우리가 항목 당 100 개 이상을 추가 할 수 있기 때문에 (GET 방식을 사용하여 내 요청을 보낼 수 없다는 것입니다 그것이 원인이됩니다 "요청 -URI too large "오류)

두 가지 방법을 사용하여 POST로이 요청을 보내지 만 성공하지는 못했습니다. 그것은 내가 다른 변수 이름 (이름 = "항목에"+ 키)와 함께 테스트 할 때 작동합니다,하지만 난에 대해 하나의 변수 이름을 사용하는 경우가 작동하지 않습니다

function post_by_form(path, params) { 

    // The rest of this code assumes you are not using a library. 
    // It can be made less wordy if you use one. 
    var form = document.createElement("form"); 
    form.setAttribute("method", "post"); 
    form.setAttribute("action", path); 
    form.setAttribute("style", "display: none") 

    for(var key in params) { 
     var hiddenField = document.createElement("input"); 
     hiddenField.setAttribute("type", "hidden"); 
     hiddenField.setAttribute("name", "item"); 
     hiddenField.setAttribute("value", params[key]); 

     form.appendChild(hiddenField); 
    } 

    document.body.appendChild(form); 
    form.submit(); 
} 

:

우선 나는이 기능을 사용 모든 입력.

은 그 때 나는 아약스에 의해 POST 요청을 보내려면이 기능을 사용 : ...

function post_by_ajax(path, params_arr){ 
    var http = new XMLHttpRequest(); 
    var url = path; 

    var params = ""; 
    for(var key in params_arr) { 
     if (params != "") 
      params += "&item="+params_arr[key]; 
     else 
      params += "item="+params_arr[key]; 
    } 

    http.open("POST", url, true); 

    //Send the proper header information along with the request 
    http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    http.setRequestHeader("Content-length", params.length); 
    http.setRequestHeader("Connection", "close"); 

    http.onreadystatechange = function() {//Call a function when the state changes. 
     if(http.readyState == 4 && http.status == 200) { 
      alert(http.responseText); 
     } 
    } 
    http.send(params); 
} 

같은 결과는,이 방법 모두가 하나의 항목 (마지막)에 대한 하나의 수량을 반환합니다 우리 동안 동일한 이름을 가진 여러 입력 필드가있는 양식을 제출할 수 있습니다. 왜이 방법을 사용하여 입력 할 수 없습니까?! 논리에 문제가 있습니까? 누군가 제발 도와주세요!

+0

'$. post (url, {}, function (response) {});'- 왜 안 되니? – devdRew

+0

@devdRew : 보내기가 가능합니다. 서버 측에서 가져 오는 것은 까다 롭습니다! ;) – Monica

답변

1

.

그걸로 합리적인 일을하는 것은 수신 서버의 책임입니다. 대부분의 시스템은 하나의 값 (어쩌면 첫 번째 또는 마지막 값)을 사용하지만, 이미 정확하게 "http://www.test.ccom/process?item=1AAA&item=1AAA&item=1AAA"을 처리하는 서버가있는 경우 "item"이라는 이름의 모든 여러 필드를 추가해야합니다.

그런 경우가 아니라면 서버 끝 부분을 처리 할 수있는 코드를 작성해야합니다. 자바 스크립트 코딩을하지 않아도됩니다. 대부분의 서버 측 프레임 워크 (일반적으로 말했듯이)는 일반적으로 값 중 하나만 사용하므로 전체 POST 본체를 가져 와서 직접 처리해야합니다.

TamperData 또는 유사한 HTTP 데이터 스트림을 캡처하고 현재 실제로 가지고있는 자바 스크립트에서 무엇이 전송되는지 확인할 수 있습니다.


그래서 궁극적으로, 귀하의 질문에 대한 대답은 "가능 자바 스크립트를 사용하여 POST를 통해 하나의 변수에 여러 시간을 보낼 수 있습니까?" 이 가능합니다.

+0

당신의 명확한 응답을 주셔서 감사합니다 ... 제게 뭔가를 시험합시다, 당신의 시간에 대한 감사의 답변을 되돌려 줄 것입니다. – Monica

+0

맞습니다. 저는 제 테스트 환경에서 PHP를 사용하고 마지막 변수를 보여줍니다. 동일 이름의 CheckBox 필드와 동일한 기능! 확인란을 사용하려면 대괄호를 사용하여 배열로 변환해야합니다 ... 어쨌든 실제 서버에서 내 게시물을 다시 테스트하면 오류 페이지가 표시되므로 이러한 변수도 구문 분석 할 수없는 것 같습니다. 하지만 그것은 get 요청과 함께 작동합니다! 가져 오기 기능은 작동하지만 게시 기능은 작동하지 않습니다. 조금 이상한 것 같아요. – Monica

+1

'Get으로 작동하는 방법과 Post에서는 작동하지 않습니까? '그것은 서버 코드가 작성된 방법에 따라 다릅니다. 저는 주로 Java로 작업하며 별도의 GET 및 POST 처리기를 작성할 수 있으므로 GET에서는 지원하지만 POST에서는 지원할 수 없습니다. GET의 경우, 매개 변수를 얻을 수 있는데,이 경우 매개 변수는'item'에 대해 하나의 값만을 제공합니다. 또는 전체 쿼리 문자열을 가져 와서 구문 분석하여 설명대로 작동하게 할 수 있습니다. 마찬가지로 POST의 경우 매개 변수를 가져 와서 하나의 값만 가져 오거나 전체 POST 본문을 가져 와서 직접 처리 할 수 ​​있습니다. 서버 측 코드 작성자의 몫입니다. –

1

동일한 이름 (예 : 'item')의 모든 변수를 전달하는 경우 요청 처리기는 변수를 구분할 수 없습니다. 그래서 당신은 단지 하나의 요소를 얻고 있습니다. 요소의 이름을 item1 = value & item2 = value & item3 = value로 변경하십시오.

100 개 요소를 전달하는 경우 확실히 post 메서드를 사용해야합니다. 이름 문제는 게시와 가져 오기 모두에 적용되므로 모든 항목의 이름이 다르게 지정되어야합니다. 파이어 폭스 TamperData 플러그인으로, 단순히 내가 POST 데이터가 실제로 변수 각각에 대해 서로 다른 값을 제외한 모든 이름 "항목을"보내 않는 것을 볼 수 있습니다 <input type="text" name="item"> 모든 지정된 네 개의 필드가있는 양식을 사용

+0

맞습니다,하지만 문제는 변수 이름에 아무 것도 추가하지 않으면 서버에서 가져올 수 없다는 것입니다 (서버 응용 프로그램이 내 것이 아니기 때문에 변경할 수 없습니다) – Monica

+0

서버 응용 프로그램은 동일한 이름을 가진 모든 변수를 전달하려는 경우에도이 변경 사항을 승인하기 위해 수정되어야합니다. 디버깅과 테스트를 돕기 위해 변수에 다른 이름을 사용하는 것이 좋습니다. – evasilchenko

+0

나는 당신의 생각에 완전히 동의한다. 불행하게도 나는 그들의 사장이 아니다! : P – Monica

관련 문제