13

AJAX 呼び出しから成功関数を取得しようとしています。独自の API をヒットしているため、適切に機能していることがわかります。URL が適切にヒットし、サーバーが HTTP 200 を出力していることがわかります。

サーバーがjsonを出力しているためだと考えたので、AJAX呼び出しでそれを説明しようとしましたが、それでも成功関数は機能しません。これが私のコードです

アヤックス

$.ajax('http://localhost:3000/api/users/show/:id', {
  type: 'GET',
  dataType: 'json',
  contentType: "application/json",
  data: {
    id: 1
  },
  success: function(response) {
    return alert("Hey");
  }
});

API メソッド

class UsersController < ApplicationController
    respond_to :json

    def show
        respond_with User.find(params[:id])
    end

end

サーバーログ

Started GET "/api/users/show/:id?id=1" for 127.0.0.1 at 2013-08-02 20:36:42 -0700
Processing by MainController#index as JSON
  Parameters: {"id"=>"1", "path"=>"api/users/show/:id", "main"=>{}}
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1  [["id", 1]]
  Rendered main/index.html.erb within layouts/application (0.6ms)
Completed 200 OK in 146ms (Views: 144.3ms | ActiveRecord: 0.5ms)
[2013-08-02 20:36:42] WARN  Could not determine content-length of response body. Set content-length of the response or set Response#chunked = true
4

5 に答える 5

22

これは私にもずっと前に起こりました。dataTypeをテキストに変更し、evalを介して手動でjsonオブジェクトに変換することでこれを解決しました。

$.ajax('http://localhost:3000/api/users/show/:id', {
  type: 'GET',
  dataType: 'text',
  contentType: "application/json",
  data: {
    id: 1
  },
  success: function(response) {
    response = JSON.parse(response);
    return alert("Hey");
  }
});

これがうまくいきますように。

于 2013-08-03T04:09:19.167 に答える
8

完全な関数を追加して、テキストのステータスを確認します。これにより、問題を解決するために必要な情報が得られるはずです。

complete: function(response, textStatus) {
    return alert("Hey: " + textStatus);
  }
于 2013-08-03T03:59:27.083 に答える
2

問題は私が経験してきたことだと思います、そして私には答えがあると思います. 「レイアウト/アプリケーション内で main/index.html.erb をレンダリング」から推測すると、呼び出しが HTML ビューを取得しているように見えますが、使用している API スタックに精通していません。

ASP.NET MVC 5 での私の症状は、完了が呼び出されたが、エラー、成功、タイムアウトのいずれも呼び出されなかったというものでした。応答オブジェクトでは、ステータスは 200 で、statusText は「OK」でしたが、textStatus パラメーターは「parsererror」でした。

responseText は私が期待していた html ですが、json の取得から html に移動したことを忘れていたので、datatype: 'json' を datatype: 'html' に変更した後、動作するようになりました。

于 2014-03-03T01:06:51.080 に答える
0

このクラスを考えると、明らかにあなたが期待しているメソッドを呼び出していません:

 class UsersController < ApplicationController

ログには次のようなものが表示されます。

Processing by UsersController#show as JSON

しかし、あなたのログはこれを示しています:

Processing by MainController#index as JSON

私の推測では、ルートが間違っていると思います。UsersController#showルートと、メソッドが呼び出されない理由を確認してください。また、ブラウザ(chrome、firefox)を使用すると、リクエストのレスポンスを調べて、実際にjsonまたはhtmlを受け取っていることを確認できるはずです。

レンダリングしようとしているのでmain.html.erb。機能していないことに驚かdataType: "json"ない。ただし、実際に有効なjsonを返している場合は機能するはずです。しかし、あなたの Rails ログは、おそらく html を返していることを示しています。

于 2014-03-03T01:14:47.327 に答える