0

ボタンがクリックされたときに呼び出される関数があります。この関数は、jquery を使用して ajax リクエストを送信します。成功すると、論理的な if ステートメントと else if ステートメントがいくつかあります。Web サーバーは 2 種類のテキスト応答のみを送信できます。「成功」または「エラー」のいずれかです。しかし、これら 2 つの条件をテストすると、失敗するように見えます。サーバーが何を送信しているかを知らせるためにelseステートメントとアラートを追加しましたが、予想どおり、サーバーでサーブレットをプログラムした方法で「成功」または「エラー」のいずれかであり、「成功」のみを送信できます」または「エラー」が応答として返されます。さらに、私のアラートは「成功」または「エラー」を吐き出しています。ここで何が問題なのかわかりません。助けてください。

 function deleteRecord(productID, description)
 {
    var errorMessage = '<td class="red-left">There was an error. <a href="">Please try again.</a></td>';
    var successMessage = '<td class="green-left">Product '+productID+' ('+description+') has been deleted sucessfully.</td>';
    var data = "productID="+productID+"&description="+description+"&deleteProduct=true";
    $.ajax({
        type: "GET",
        url: "deleteInventoryRecord.mpcs",
        data: data,
        cache: false,
        success: function(info)
        {
            if(info == 'Success')//This does not work
            {
                $(".green-left").replaceWith(successMessage);
                $("#message-green").fadeIn("slow");
                $("#product-"+productID).remove();
            }
            else if(info == 'Error')//This does not work
            {
                $(".red-left").replaceWith(errorMessage);
                $("#message-red").fadeIn("slow");
            } 
            else//This works always but I dont need it
            {
                alert(info); //It always says "Success" or "Error"
            }
        },
        dataType: 'text'
    });
 }

応答を送信するサーブレット コードは次のとおりです。

private void deleteProduct(HttpServletResponse response, String productID) throws IOException
{
    try
    {
        response.setContentType("text/html");
        InventoryDAO iDao = new InventoryDAO();
        if(iDao.deleteProduct(productID) == true)
            response.getWriter().println("Success");
        else
            throw new RuntimeException("Error");
    }
    catch(ClassNotFoundException | IOException | SQLException | RuntimeException xcp)
    {
        response.getWriter().println("Error");
    }
}
4

2 に答える 2

2

ここで暗闇の中でショットを撮り、サーバーがBOMを使用して UTF8 で応答を送信していると言います。これにより、比較が失敗します。

確認するには、 を試してくださいalert(info.length)。「成功」の場合は 7、「エラー」の場合は 5 になります。そうでない場合は、おそらく BOM があります。

もちろん、チェックすべきもう 1 つのことは、応答に空白がないことです。繰り返しますが、lengthチェックはこれを確認するのに役立ちます。

これは、サーバー側スクリプトを「BOM なしの UTF8」としてエンコードすることで修正できます。エディターによっては、「ANSI as UTF8」と呼ばれることもあります。ifまたは、ブロックを次のように変更します。

if( info.match(/Success$/)) ...
else if( info.match(/Error$/)) ...
于 2013-10-15T20:33:21.297 に答える