2012-04-17 3 views
0

json 객체를 사용하여 jsp 파일에서 데이터를 전송하려고합니다.getJSON() JavaScript 함수가 호출되지 않았습니다.

이 내 자바 스크립트 코드 :

public class BomItemToJSON extends HttpServlet { 

private static final long serialVersionUID = 1L; 

@PersistenceContext(unitName = "xxx") 
public EntityManager em; 

@Resource 
UserTransaction utx; 

    Logger logger = Logger.getLogger(this.getClass().getCanonicalName()); 


    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

    System.out.println("bom item to json servlet has been called."); 
    try { 
     utx.begin(); 
    } catch (NotSupportedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (SystemException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    //int id = Integer.parseInt(request.getParameter("id")); 
    BomHandling bh = new BomHandling(em, utx); 

    BomItem item = bh.getBomItem(63788); 
    Gson gson = new Gson(); 
    String json = gson.toJson(item); 

    System.out.println("Json: " + json); 

    response.setContentType("text/plain"); 
    response.setCharacterEncoding("UTF-8"); 
    response.getWriter().write(json); 

    try { 
     utx.commit(); 
    } catch (SecurityException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IllegalStateException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (RollbackException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (HeuristicMixedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (HeuristicRollbackException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (SystemException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

}

이것은 서블릿을 매핑 내 web.xml 파일입니다 : 이것은 자바 스크립트에 의해 호출해야 내 서블릿

// action when item file is clicked 
$("li span.file").click(function(){ 

// get the ID 
alert(' Forward the url when clicked WITH ID => ' + $(this).attr('id')); 

$.getJSON('BomItemToJSON', function(data) { 
    alert('entered getJSON()'); 
    $.each(data, function(i, item) { 
     alert('entered each()'); 
     var id = item.id; 
     var description = item.description; 

     alert('description: ' + description); 

     formObject = document.forms['itemForm']; 
     formObject.elements['itemId'].value = id; 
     formObject.elements['itemDescription'].value = description; 

     alert('done with javascirpt'); 
    }); 
}); 

}); 

입니다 :

<servlet> 
    <display-name>BomItemToJSON</display-name> 
    <servlet-name>BomItemToJSON</servlet-name> 
    <servlet-class>com.xxx.servlets.BomItemToJSON</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>BomItemToJSON</servlet-name> 
    <url-pattern>/BomItemToJSON</url-pattern> 
</servlet-mapping> 

항목을 클릭하면 "id를 클릭하면 URL 전달"이라는 경고 메시지가 나타납니다. 그러나 그것은 getJSON() 함수가 호출되지 않는 것처럼 보입니다. 왜? 실종 뭐죠 찾을 수

+1

'BomItemToJSON'이라는 지정된 URL이 실제로 있습니까? 예인 경우 어떻게 되나요? JS 콘솔에서 오류가 발생합니까? – m90

+0

현대적인 브라우저에서 디버깅 도구를 열고 "네트워크"탭 또는 유사한 것을보십시오. URL 매핑에 문제가 있음을 나타내는 404 오류 또는 유사한 메시지가 표시되거나 서블릿에 문제가 있음을 나타내는 500 오류가 표시됩니다. 어느 쪽도 보지 않는다면, 응답 데이터를보아야합니다. 그러면 응답 데이터가 무엇이 진행되고 있는지 파악하는 데 도움이됩니다. –

+1

실제 문제와 관련이 없지만 'text/plain' 콘텐츠 유형으로 JSON을 반환하는 이유는 무엇입니까? JSON의 올바른 콘텐츠 유형은 ['application/json'] (http://tools.ietf.org/html/rfc4627)입니다. (getJSON은 내용 유형을 무시하고 그 결과를 JSON으로 해석하기 때문에 연관성이 없다고합니다.)하지만 콘텐트 유형을 명시 적으로 설정하면 제대로 설정 될 수 있습니다. –

답변

0

몇 가지 디버깅 팁 :

    사용 방화범은 Firefox 용 (나는 아직도 찾아 덜 좋은 다른 당량)
  1. 대신 경고
  2. 사용을 console.log ("텍스트"), 그들은 그다지 파괴적이지 않다. IE 등에서 깨지기 때문에 주석을 제거/주석 처리하십시오.
  3. Firebug의 스크립트 탭에서 디버거를 사용하여 코드가 처음에 getJson 함수에 도달하는지 확인하십시오. 또한 콜백 함수를 디버깅 할 수 있습니다.
  4. net tab을 사용하여/BomItemToJSON url이 호출되고 브라우저에 어떤 응답이 주어 졌는지 확인하십시오.

또한 저는 개인적으로 $ .ajax 함수를 jQuery에서만 사용하고 속기는 사용하지 않습니다.

관련 문제