我在将 POST 请求从 jQuery 发送到在 Flask 中创建的服务器时遇到问题。在 Chrome 的 POSTMAN 扩展中,一切似乎都运行良好 - 响应被发送回客户端。从 java 脚本发送请求时,我收到“415 Unsupported Media Type”错误。Python(3.4.x) 烧瓶服务器具有以下功能:
from flask import Flask, jsonify, render_template, request
@app.route('/checers/register', methods=['POST'])
def register():
clientId = 1
print ("new client id: {0}".format(clientId))
ret = {"clientId" : clientId};
return jsonify(ret)
就像我说的,来自 POSTMAN 参数:
网址:http://localhost:8080/checers/register;标题:内容类型;值:应用程序/json;块引用
使 POST 请求工作正常。在 java 脚本应用程序中,我尝试了两种方法:首先使用 XMLHttpRequest:
function register3() {
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function ()
{
if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
alert(xmlhttp.responseText);
}
};
xmlhttp.open("POST", "http://localhost:8080/checers/register", true);
xmlhttp.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
xmlhttp.send("");
}
第二个是 jQuery:
function register() {
var arr = {a : "a"};
$.ajax({
url: "http://localhost:8080/checers/register",
type: "POST",
// The key needs to match your method's input parameter (case-sensitive).
data: JSON.stringify(arr),
contentType: "application/json; charset=utf-8",
accept: 'application/json',
dataType: "json",
success: function(data){alert(data);},
error: function(errMsg) {
alert(errMsg);
}
});
}
当然,我尝试过 Stack 中提出的不同变体,但没有任何效果。我是 Flask 和 JS 的新手,这是我为此苦苦挣扎的第二天。我在烧瓶服务器中找到了一些关于跨域调用 OPTIONS 方法问题的信息,也许是这种情况?最近有人在纠结这个吗?