1

我正在尝试为 Tiny Tiny RSS 构建一个阅读器,但几乎被困在了第一方。我正在通过prototype.js(1.6.1)将应用程序设置为使用ajax,并尝试简单地登录到应用程序以检索密钥。

这是我到目前为止所拥有的:

new Ajax.Request(Api.BASE_URL, {
  method: "get",
  parameters: {"op": "login", "user": "user", "password": "password"},
  onSuccess: authSuccess,
  onFailure: failure
})

其中 Api.BASE_URL 定义为“ http://tt-rss.example.com/api/

当我尝试登录时,我收到错误响应“NOT_LOGGED_IN”,这似乎表明 api 要么无法识别我正在使用的操作调用,要么参数错误,或者其他什么。

特别奇怪的是,这应该等同于 CURL 命令:

curl -d '{"op":"login","user":"user","password":"password"}' http://tt-rss.example.com/api/

哪个工作正常。我觉得我错过了一些非常简单的东西,但不确定它是什么。任何帮助将非常感激。

4

2 回答 2

1

除了 get vs post 错误之外,事实证明问题在于我试图使用错误的 ajax 选项传递一个复杂的 json 对象。

我用一个更简单的函数调用(isloggedin)进行了测试,所以我的 json 对象被定义为:

parameters: {"op": "isloggedin"},

当我使用“参数”ajax 选项时,请求以以下形式发送原始数据:

op=isloggedin&_=

哪个被拒绝了。

另一方面,来自 cURL 的原始数据看起来像:

{"op":"isloggedin"}

哪个有效。

这篇文章让我走上了正轨。我需要使用“postBody”而不是“parameters”来正确发送数据。我的最后一个命令看起来像这样:

  postBody: '{"op": "isloggedin"}',

它奏效了。此外,显然在这种情况下,引号类型确实很重要。如果我在外面使用单引号,它就起作用了。如果我在外面使用双引号,如果失败。

于 2013-07-12T22:08:48.813 回答
0

您的 curl 命令在 POST 请求中发送数据,而 Ajax 调用使用 GET 方法。根据 tt-rss API 文档,旧版本同时支持 GET 和 POST,但现在必须在 HTTP POST 数据中使用 JSON 对数据进行编码

于 2013-07-11T23:42:59.830 回答