0

以下の ajax メソッドは、アクション クラスでメソッドを起動し、アクション クラスは失敗します (すべてのスタック トレースで null ポインター例外が発生します)。しかし、私の ajax は常に成功します: function.? なぜこれが起こっているのか教えてください。ajax 呼び出しで何を変更すればよいですか? 提出する必要がありますか?情報を引き出し、行動から成功を掴もうとしているだけです。+ 以下の ajax 呼び出しは、IE でクリックしないアクション クラスを呼び出します。Firefoxでうまく動作します。

アクションクラスのメソッドです。

public String pullData() {

    try {
        logger.debug("Pulling Data..!");
        data.getInformation();  -> //throws null pointer exeption.
        return SUCCESS;
    } catch (Exception e) {
        this.LOG.warn("Error while trying to execute quartz job: " + e);
        e.printStackTrace();
        return ERROR;
    }
}

jsp

<input id="pullDataButton" class="button" type="button" value="Pull"  /> 

ajaxメソッド

$("#pullDataButton").click(function() {
    $.ajax( {
      traditional: true,
      type: "POST",      
      url: "PullData.action",
      async: true,
      success: function(response) {
          $('#placeHolder').html('Data Pulled!').css({color:'green'});
      },
      error: function(e) { 
          $('#placeHolder').html('Data Pull Failed!').css({color:'red'});
      }       
    });
}); 

struts.xml

<action name="pullData" method="pullData" class="com.pay.code.PullDataAction">
        <result name="input">mainInfo.jsp</result>
        <result name="error">mainInfo.jsp</result>
        <result name="success">mainInfo.jsp</result>
    </action>
4

1 に答える 1

0

エラー コードを返さない限り、JavaScript コードが何か問題が発生したことを認識する方法はありません。つまり、通常のリクエスト結果を返すことになります。JS はS2 からの実際の応答を正確にキャプチャしており、Firebug やその他のブラウザー開発ツールを使用して応答を確認することでそれを証明できます。

現在のディスパッチャーの結果で HTTP 応答コードを設定できるかどうかは覚えていません。できる場合は、エラーに設定してください。そうでない場合 (そうではないと思います)、既存の結果の型をハックして、コードを設定できるようにすることができます。これは、特に HTTP エラー応答 (またはその他の) コードが必要な場合に私が行ったことです。

もう 1 つのオプションは、JSON を返し、JSON のコンテンツを使用してエラー ステータスと新しい DOM コンテンツの両方を判断し、クライアント側でもう少し作業を行うことです。

もう 1 つのオプションは、送り返す JSP に情報を入れることです。たとえば、アクション プロパティを使用して HTML コンテンツの一部を決定します。そのため、JS 側で行う代わりに、JSP で行います。または、変更されない「定数」部分を埋め込んだり含めたりして、別の JSP を完全に返します。

最適なオプションは、スキル セットと要件によって異なります。

于 2013-05-17T02:05:29.143 に答える