2012-05-23 10 views
2

ExtJS를 사용하여 AJAX 요청을 수행하고 있습니다. 여기 내 코드가PUT 메서드를 사용할 때 JSON을 매개 변수로 가져올 수 없습니다.

Ext.Ajax.request({ 
    url: 'TestServer', 
    method: 'PUT', 
    params: { 
     json: Ext.encode({ 
      name: 'dummy' 
     }) 
    } 
}); 

그래서 서블릿에서 요청 매개 변수를 가져 오기로 결정했습니다. 그래서 내가 사용했습니다

request.getParameter("json") 

그러나 대신 null 값을 얻습니다. 그것은 POST 메소드를 사용할 때 잘 작동하지만 PUT은 사용하지 않습니다. PUT 메서드를 사용하는 동안 서블릿에서 요청 매개 변수를 가져 오는 다른 방법이 있습니까? Ext.Ajax 4.1 Docs에서

+0

서블릿이 PUT 요청을 허용하도록 구성 되었습니까? – jmort253

답변

1

:

방법 : 문자열 기본 HTTP 방법이 요청을 사용합니다.

문서는 PUT을 허용에 대한 언급을하지 않습니다. (설정하지만 PARAMS 그렇지 않으면 "GET"사용 "POST"를 사용합니다 존재하지 않는 경우)이 대소 문자를 구분하며 모두 대문자로해야합니다,하지만 또한 PUT을 허용하지 않는 것에 대해서는 언급하지 않습니다.

또한 HTTP Method Override을 사용하여 서블릿이 PUT 또는 DELETE에 매핑 된 서비스를 호출하도록하는 방법을 설명하는 설명서가 있습니다.

다른 HTTP 메소드 옵션을 생략 한 Ext.Ajax 문서와 함께 단순히 PUT 또는 DELETE를 직접 사용하는 대신 HTTP 메소드 오버라이드를 사용하도록 제안한다는 사실은 사용자가하려고하는 것이 내선

원시 XmlHttpRequests와 심지어 jQuery AJAX에서도 매우 이상하다고 생각됩니다.

그러나, 자바 스크립트의 동적 입력 및 기능적 특성을 활용 한 쉽게 this forum post에서 찍은 코드를 기본 Ajax 기능을 확장/재정의 할 수

Ext.lib.Ajax.request = function(method, uri, cb, data, options) { 
     if(options){ 
      var hs = options.headers; 
      if(hs){ 
       for(var h in hs){ 
        if(hs.hasOwnProperty(h)){ 
         this.initHeader(h, hs[h], false); 
        } 
       } 
      } 
      if(options.xmlData){ 
       this.initHeader('Content-Type', 'text/xml', false); 
       method = (options.method == 'PUT' ? 'PUT' : 'POST'); 
       data = options.xmlData; 
      }else if(options.jsonData){ 
       this.initHeader('Content-Type', 'text/javascript', false); 
       method = (options.method == 'PUT' ? 'PUT' : 'POST'); 
       data = typeof options.jsonData == 'object' ? Ext.encode(options.jsonData) : options.jsonData; 
      } 
     } 

     return this.asyncRequest(method, uri, cb, data); 
    }; 

    // example request 
    Ext.Ajax.request({ 
     url: 'testrest.php', 
     method: 'PUT', 
     headers: {'Content-Type': 'text/xml'}, 
     success: function(response, opts) { Ext.Msg.alert('Sucess', 'Update has been successful'); }, 
     xmlData: '<blah>de</blah>' 
    }); 

마지막으로, 그것의 버전도 분명하지 않다 위에서 사용한 코드 샘플은 2007에서 가져온 것입니다. params를 사용하는 대신 xsonData 대신 jsonData를 사용하도록 AJAX 요청을 수정해야 할 수도 있습니다. 매개 변수가 오버라이드/연장 동작. 또한 포럼의 포스터 중 하나는 params가있는 경우 지정된 내용에 관계없이 POST가 기본적으로 사용된다는 것을 언급했습니다. 따라서 이것은 jsonData를 대신 사용하는 것을 고려해야하는 또 다른 이유입니다.

jsonData가 사용자의 요구 사항을 충족시키지 못하면이 코드 예제의 작성자가 보여준 예제를 따라 params를 제출할 때 "PUT"요청이 포함되도록 Ext.Ajax 사본을 수정할 수 있습니다.

+0

저는 ExtJS 3.3.1을 사용하고 있습니다. 나는 대신 jsonData를 사용하려고 시도했으며 매개 변수로 취급하지 않는 것 같습니다. 데이터는 서블릿에 성공적으로 전송되었지만 데이터를 검색하는 방법에 대해서는 알지 못합니다. – Vincent

+0

디버거의 NET 탭에서 요청을 찾습니다. 크롬을 사용하는 경우 내용 탭을 확인하십시오. 매개 변수 대신 요청 본문에 데이터를 보낼 수 있습니다. 즉, 요청 본문의 데이터에 액세스해야합니다. 또는이 예를 따라 플러그인을 수정해야 할 수도 있습니다. 마지막 제안. jQuery가이 문제를 겪지 않는다는 점은 주목할 가치가 있습니다. 원시 XMLHttpRequest 객체도 아닙니다. 그 중 하나가 당신을위한 옵션이 될 수 있습니까? – jmort253

+0

또한 4.1 대신 이전 버전의 Ext를 사용하는 이유는 무엇입니까? – jmort253

관련 문제