3

jQuery を介してリモート サービスで認証しようとしています。最初に、これをブラウザーの外で実行できることを確認します。

 curl -X POST -H "Content-Type: application/json" -H "Accept: appliction/json" -d '{"username":"...","password":"..."}' http://example.com/auth

これにより、トークンが正常に返されます。

今私はjQueryでそれを試します:

$.ajax({
    url: "http://example.com/auth",
    type: "POST",
    dataType: "json",
    contentType: "json",
    data: {username:"...",password:"..."},
    error: function(data){alert(JSON.stringify(data))},
    success: function(data){alert(JSON.stringify(data))}
});

サーバー エラー (500) が発生します。明らかに私は何か間違ったことをしています。jQuery で POST を実行するのはこれが初めてなので、問題を特定する方法がわかりません。ここで何が間違っていますか?

PS 既にトークンを持っている場合、jQuery を介して GET 要求を正常に実行できます。

$.ajax({
    url: "http://example.com/stuff?token=f42652adcbfe3ed9d59fae62b5267b8d",
    type: "GET",
    dataType: "json",
    error: function(data){alert(JSON.stringify(data))},
    success: function(data){alert(JSON.stringify(data))}
});
4

6 に答える 6

3

私が気付く唯一のことは、データ表現の違いです。元のリクエストのデータを見てください。

-d '{"username":"...","password":"..."}'

そして、AJAX リクエストのデータ:

data: {username:"...",password:"..."}

前者はキーを文字列でラップしますが、後者はラップしません。全体も文字列でなければなりません。試す:

data: '{"username":"...","password":"..."}'

これは、一般的にJSON 形式のデータとの一貫性がより高いと思います。キーを文字列でラップしないと、JavaScript オブジェクトである可能性がありますが、JSON データではありません。

于 2013-11-08T18:15:06.680 に答える
0

js がロードされたのと同じドメインに投稿していますか? そうでない場合は、jsonp を使用して、サーバーが明示的にリクエストを受け入れるようにする必要があると思います。

于 2013-11-08T18:41:15.123 に答える
0

500内部サーバーエラー

サーバーで予期しない状況が発生したため、要求を実行できませんでした。

URL からの Json 応答が原因である可能性があります。stringfy 関数にコメントを付けて、応答を警告することができます。応答で try/catch メソッドを使用して、エラーを確認できます。

于 2013-11-08T18:20:25.583 に答える