0
jsonオブジェクトを使用してjspファイルからデータを転送しようとしています。getJSON()JavaScript関数が呼び出されていません
これは私のJavaScriptコードです:
// 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');
});
});
});
これには、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のです:
<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()関数が呼び出されていないようです。どうして?
指定されたURL「BomItemToJSON」は実際に存在しますか?はいの場合、それは何を返すのですか? JSコンソールにエラーが表示されますか? – m90
最新のブラウザでは、デバッグツールを開き、[ネットワーク]タブなどを確認してください。 404エラーなどが表示されます。これはURLマッピングの問題を示しているか、または500エラーです。これはサーブレットの問題を示しています。どちらも見えない場合は、応答データが表示されます。これは、何が起きているのかを把握するのに役立ちます。 –
実際の問題とは関係ありませんが、なぜコンテンツタイプが 'text/plain'のJSONを返すのですか? JSONの正しいコンテンツタイプは['application/json'](http://tools.ietf.org/html/rfc4627)です。なぜなら、getJSONはコンテンツタイプを無視して結果をJSONとして解釈しようとするからです。コンテンツタイプを明示的に設定している場合は、正しく設定することもできます。 –