0

jQuery からの ajax 呼び出しの応答本文を処理しようとしていますが、これまでのところ成功していません。

ここに私のjQueryコードがあります:

function doAjaxClosedStatus(url, requestId, closedStatusId) {
$.ajax({
    type: "POST",
    url : url+requestId,
    data : ({
        'closedStatusId' : closedStatusId
    })
}).success(function(msg) {
    alert(msg);
    if (msg == "fail") {
        alert("test");
        $(document).append($('<div class="alert alert-error affix" data-offset-top="200">You can\'t specify a closed status if status is not set as "closed"</div>'));
        $('option:selected', '.closedStatus ').removeAttr('selected');
        $('.closedStatus option:first-child').prop('selected', 'selected');
    }
});

}

したがって、呼び出しとサーバー側の処理全体が魅力的に機能し、すべてが正しく行われたか失敗したかによって、それぞれ「完了」または「失敗」のいずれかで応答します (ご想像のとおりです)。ここで、応答がfailのときにクライアント側の処理を実行したいのですが、alert(msg)トリガーされません...何が間違っていますか?

編集:私はSpring MVCをバックエンドとして使用していて、単に「失敗」を@ResponseBody. ネットワーク フローを確認すると、応答本文は「失敗」または「完了」です。

EDIT2:私は試しました:

$.ajax({
    type: "POST",
    url : url+requestId,
    data : ({
        'closedStatusId' : closedStatusId
    }),
    success:function(msg) {
        alert(msg);
        if (msg == "fail") {
            alert("test");
            $(document).append($('<div class="alert alert-error affix" data-offset-top="200">You can\'t specify a closed status if status is not set as "closed"</div>'));
            $('option:selected', '.closedStatus ').removeAttr('selected');
            $('.closedStatus option:first-child').prop('selected', 'selected');
        }
    }   
});

まだ成功していません...

EDIT3:だから私はこれをもう一度試しました:

function doAjaxClosedStatus(url, requestId, closedStatusId) {
$.ajax({
    type: "POST",
    url : url+requestId,
    data : ({
        'closedStatusId' : closedStatusId
    }),
    success:function(msg) {
        alert(msg);
        if (msg == "fail") {
            alert("test");
            $(document).append($('<div class="alert alert-error affix" data-offset-top="200">You can\'t specify a closed status if status is not set as "closed"</div>'));
            $('option:selected', '.closedStatus ').removeAttr('selected');
            $('.closedStatus option:first-child').prop('selected', 'selected');
        }
    }   
});

}

そして、何らかの理由で、それは現在機能しています。おそらく、ブラウザのキャッシュが空になっておらず、古いバージョンのスクリプトを使用していたことが原因でした。とにかく、これで正しく動作するようになりました。私のDOM操作を除いて、これは質問自体に属していないので、件名は閉じられました! みんな、ありがとう!

4

4 に答える 4

0

あなたのコードは実際にはそのまま機能しますが、失敗する可能性がある理由についていくつかの理論があります。

  1. 応答の MIME タイプが原因で、jquery が応答を XML として誤って解釈し (たとえば)、解析に失敗する可能性があります。をハードコーディングすることで修正できますdataType

    dataType : 'text',
    
  2. 別のドメインのサーバーに接続しようとしているため、クロス ブラウザー スクリプト エラーが発生しています。Access-Control-Allow-Originサーバーにヘッダーを設定することで修正できます。1 つの方法は、次のように .htaccess ファイルを使用することです。

    Header set Access-Control-Allow-Origin "*"
    
于 2013-06-28T12:16:12.403 に答える