javascript - AngularJS http.post 与 cherrypy

标签 javascript angularjs post curl cherrypy

我正在尝试将事件发布到响应 GET/POST 的 CherryPy 小型应用程序中,但是当尝试使用 AngularJS 时,它根本没有发布任何东西。

现在,我不知道这是否与 AngularJS 或 CherryPy(CP)有关,CP 中启用了跨域,但它根本无法获取 POST 方法。然而,这适用于 CURL

CP 中的 POST 定义为:

    def POST(self, date, description):
    # read items to catch any server side update
    events = {
        "date": int(date.encode('ascii','ignore')),
        "description": description.encode('ascii','ignore'),
        "status":"Active"
    }
    # storing changes
    save_events(events)
    return ('Event created\n')

header 通过以下方式启用:

def enableCrossDomain():
cherrypy.response.headers["Access-Control-Allow-Origin"] = "*"
cherrypy.response.headers["Access-Control-Allow-Methods"] = "GET, POST"
cherrypy.response.headers["Access-Control-Allow-Headers"] = "Cache-Control, X-Proxy-Authorization, X-Requested-With"

def OPTIONS(self):
    enableCrossDomain()
    return

CURL 调用如下所示:

curl -d $EPOCH_DATE -d $EVENT -X POST 'myurl.com:1234/api/events/'

用 AngularJS 试试这个:

var message = "'" + $scope.event_description + "' '" + $scope.datetime_start + "'";
            console.log(message);
            $scope.post_url = "myurl.com:1234/api/events";
            $http.post($scope.post_url,message).success();

已经尝试将“消息”作为 JSON 发布并在 header 中指定它,但就是无法正常工作。有什么想法我错过了什么或者我还应该在这里尝试什么吗?

最佳答案

看起来答案很简单:

URL 编码不正确,因此浏览器运行异常;改变了这个:

$scope.post_url = "myurl.com:1234/api/events";

为了

$scope.post_url = "http://myurl.com:1234/api/events";

然后只是错误地解析了消息,我通过以下消息注意到了这一点:

HTTPError: (404, 'Missing parameters: message')

为了简单起见,将参数更改为仅一条消息并在 python 内部将其拆分,然后我的整个 POST 调用更改为:

$scope.post_url = "http://myurl.com:1234/api/events";
var message = 'message=' + $scope.datetime_start + ',' + $scope.event_description;
$http({
    method: 'POST',
    url: $scope.post_url,
    data: message,
    headers: {'Content-Type': 'application/x-www-form-urlencoded'}
});

同样重要的是,在 python 端我没有将 header 附加到 POST 消息,更改了以下内容:

def POST(self, date, description):
# read items to catch any server side update
events = {
    "date": int(date.encode('ascii','ignore')),
    "description": description.encode('ascii','ignore'),
    "status":"Active"
}
# storing changes
save_events(events)
return ('Event created\n')

为此:

def POST(self, message):
    # read items to catch any server side update
    events = {
        "date": int(message.split(',')[0].encode('ascii','ignore')),
        "description": message.split(',')[1].encode('ascii','ignore'),
        "status":"Active"
    }
    # storing changes
    save_events(events)
    enableCrossDomain() # HEADERS HERE OR AJAX GETS ANGRY
    return ('Event created\n')

关于javascript - AngularJS http.post 与 cherrypy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21464814/

相关文章:

javascript - jcrop setSelect问题

javascript - 在同一个 html 页面上使用不同的 D3 版本

javascript - Bower - EPERM,取消链接错误

JQuery POST 请求转换为 OPTIONS。为什么?

java - 为什么我在响应 JSON 请求时收到 500 错误?

c# - 验证在单元测试中失败

javascript - 如何访问 Collection View (或布局)的 templateHelper 中的特定模型?

javascript - Angular.js 搜索查询(如果搜索表单不在当前文件中)

javascript - 参数 'AppCtrl' 不是函数,未定义 - $http angular-ionic 错误

javascript - Angularjs:空对象,什么时候只有一键点击?