7

コールバック関数の実行に問題があります。

$.post("/" + contentId + "/postComment", {
    "postComment": ""
}, function(data) {
    alert('call back');
});

この投稿は行われます。ただし、アラートは呼び出されません。

この投稿の結果、一部xmlが返されます。と一緒にSpringマッピングを使用しているため、どのように見えるかを正確に知ることはできません。また、Springが何を返すのかがわかりません。これは、サーバーの応答の内容が何らかの形でコールバックに影響を与える可能性がある場合に備えて言っています。application/xml@RequestBody

質問は:

コード例でそのアラートを表示するには、何をする必要がありますか?

4

4 に答える 4

25

あなたのコードは、エラーハンドラーをフックしないことを除けば問題ありません(私が好きではない理由の1つ$.post)。POST操作はエラーになるはずだと思います。これに変換してみてください:

$.ajax({
  type:    "POST",
  url:     "/"+contentId+"/postComment",
  data:    {"postComment":""},
  success: function(data) {
        alert('call back');
  },
  // vvv---- This is the new bit
  error:   function(jqXHR, textStatus, errorThrown) {
        alert("Error, status = " + textStatus + ", " +
              "error thrown: " + errorThrown
        );
  }
});

...エラーが何であるかを確認できます。

于 2012-05-26T16:56:59.393 に答える
6

文字列をデータとして提供し、サーバーがJSON応答を返すと、コールバックが起動しないという同様の問題がありました。これを回避するには、データ型をJSONとして明示的に指定するだけです。

function update_qty(variant_id, qty){
  $.post('/cart/update.js', "updates["+variant_id+"]="+qty, function(data){
    updateCartDesc(data);
  }, "json");
}
于 2017-10-02T12:05:37.343 に答える
0

実際にJSONである場合、ajaxスクリプトはではapplication/jsonなくのコンテンツタイプを持つ必要があることに気付きました。application/javascript

于 2015-01-03T03:08:51.523 に答える
0

読みやすくするために、上記の正解は無視することをお勧めします。JQuery 1.5以降(またはそれ以降、質問の場合)は次を使用します。

$.post("/" + contentId + "/postComment", {
    "postComment": ""
}).always(function() {
    alert('call back');
});

JQueryのドキュメントに記載されているように:https
: //api.jquery.com/jquery.post/ドキュメントからはあまり明確ではありませんが、postリクエストから返された「jqXHR」オブジェクトをalways、fail、および完了した機能。

必要に応じて、パラメータを次のように拡張できます。

.always(function(responseArray, request, jqxhr, status, error) {
    alert( jqxhr.responseText );
});
于 2018-10-15T17:21:28.423 に答える