Ruby on Railsサーバーと通信しようとしているクライアント側にjqueryコードがあります。現在、クライアント経由でログインを機能させようとしています。
ユーザーが送信ボタンをクリックしたときに実行される jquery コードを次に示します。
$.ajax({
headers: { 'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content') },
type:"POST",
data: hash,
url: 'http://0.0.0.0:3000/users/sign_in.json',
success: function(data) {
alert('Success');
alert(JSON.stringify(data));
},
error: function(data) {
alert('Failed!');
alert(JSON.stringify(data));
},
});
});
Rails サーバーのログを監視したところ、"Completed 200 OK in 387ms" が表示されました。これは、サーバー プロセスが正常に完了し、応答がクライアントに返されたことを意味します。
ただし、成功関数の代わりにクライアントでは、エラー関数が実行され、私は取得します{"readyState":0,"responseText":"","status":0,"statusText":"error"}
これがコントローラーのコードです
def create
resource = User.find_by_email(params[:user][:email])
return invalid_login_attempt unless resource
if resource.valid_password?(params[:user][:password])
sign_in(:user, resource)
resource.ensure_authentication_token
respond_to do |format|
format.html { redirect_to user_courses_path(current_user), notice: 'You are logged in' }
format.json { render :json=> { :auth_token=> current_user.authentication_token, :success=> true, :status=> :created }}
end
return
end
invalid_login_attempt
終わり
私はfirebugを使ってみましたが、POSTリクエストの応答タブで見ました
syntaxerror json.parse予期しないデータの終わり
これは、サーバーから送信された応答が適切なハッシュではなかったことを意味します。を使用して同じ投稿リクエストを実行してみました
curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST -d ' {"user":{"email":"asdf@jjpt.com","password":"password"}}' http://0.0.0.0:3000/users/sign_in
次の応答が得られます{"auth_token":"zk1dyduMAo283mxP5o1m","success":true,"status":"created"}
したがって、curl リクエストは機能しています。しかし、jquery リクエストは JSON.parse エラーを返しています。どうしてか分かりません。誰かが私を助けてくれませんか、少しイライラしています。