2012-04-17 46 views
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()関数が呼び出されていないようです。どうして?

+1

指定されたURL「BomItemToJSON」は実際に存在しますか?はいの場合、それは何を返すのですか? JSコンソールにエラーが表示されますか? – m90

+0

最新のブラウザでは、デバッグツールを開き、[ネットワーク]タブなどを確認してください。 404エラーなどが表示されます。これはURLマッピングの問題を示しているか、または500エラーです。これはサーブレットの問題を示しています。どちらも見えない場合は、応答データが表示されます。これは、何が起きているのかを把握するのに役立ちます。 –

+1

実際の問題とは関係ありませんが、なぜコンテンツタイプが 'text/plain'のJSONを返すのですか? JSONの正しいコンテンツタイプは['application/json'](http://tools.ietf.org/html/rfc4627)です。なぜなら、getJSONはコンテンツタイプを無視して結果をJSONとして解釈しようとするからです。コンテンツタイプを明示的に設定している場合は、正しく設定することもできます。 –

答えて

0

欠けていただきました見つけるためにいくつかのデバッグのヒント:代わりに、アラートのFirefox用

  1. 使用Firebugの(私はまだ他の同等物はあまり良い見つける。)
  2. 使用はconsole.log(「テキスト」)、彼らそれほど破壊的ではありません。
  3. Firebugのスクリプトタブでデバッガを使用して、コードが最初にgetJson関数に到達していることを確認してください。また、コールバック関数をデバッグすることもできます。
  4. ネットタブを使用して、/ BomItemToJSON URLが呼び出されているか、ブラウザにどのような応答が与えられているかを確認します。

また、私は個人的に$ .ajax関数をjQueryでのみ使用していますが、その簡略表記ではありません。

関連する問題