【发布时间】:2019-05-29 20:59:46
【问题描述】:
我有一个在 Apache 中运行的 Flask 服务器,它返回一个带有按钮的 HTML 页面,用于向相对 URL 提交 AJAX POST 请求。在 Firefox 中,AJAX 调用立即失败并返回 400,记录 POST response ERROR code: 400。将 xhr 对象或数据参数记录到控制台会生成<unavailable>,其responseText 属性为undefined。无论将什么 URL 传递给 AJAX,响应都是完全相同的。绝对 URL (http://thehostname.com/path/send-email) 也给出相同的结果。
Apache 的access.log 显示在 AJAX 请求时没有请求进入。该请求根本不会出现在开发工具的 Firefox 的“网络”选项卡中。该请求在 Chrome 中运行良好,所有其他条件都相同,cURL 也是如此。
代码如下。请帮忙!
HTML:
<img width="20px" src="mail.png" alt="" onerror="this.style.display='none'" onclick="sendEmail('val1', 'val2', 'val3')">
JS:
function sendEmail(val1, val2, val3) {
val1 = prompt('Prompt2 for ' + val2 + ':', val1);
console.log('Val1: '+ val1);
if(val1) {
let xhr = $.ajax({
method: 'POST',
url: 'send-email',
// Tried with and without stringify
data: JSON.stringify({param1: val1, param2: val2, param3: val3}),
contentType: "application/json; charset=utf-8",
dataType: 'text',
cache: false,
traditional: true
}).done(function(){
alert("Sent!");
}).fail(function(data){
console.log("Info:");
console.log(xhr.responseText);
alert('Failed to send');
});
}
console.log("Ret false");
return false;
};
Python 端点:
@app.route('/autorack_testing_report/send-email', methods=['POST'])
@app.route('/send-email', methods=['POST'])
def send_email():
print("Send email") # Not getting printed
info = request.form or request.json
if not (info and info.get('param1') and info.get('param2')):
abort(400, 'Must supply recipient and ticket')
send_to_list = re.split(',|;', info['param1'])
send_to = []
for s in send_to_list:
if s.strip():
send_to.append(s.strip() + '@domain.com')
send_to = ','.join(send_to)
ticket = info['ticket']
smtp = smtplib.SMTP('mysmtphost', 25)
msg = MIMEMultipart('alternative')
msg['Subject'] = 'subject'
msg['From'] = msg['To'] = send_to
msg.attach(MIMEText('somecontent', 'plain'))
smtp.sendmail(send_to, send_to, msg.as_string())
smtp.quit()
resp = make_response('Success', 200)
resp.headers['Content-Type'] = 'text/plain'
return resp
Firefox 控制台输出:
Val1: myinput
Ret false
POST response ERROR code: 400
POST response ERROR code: 400
Info:
undefined
没有 Python 输出,因为 Apache 没有收到请求。
【问题讨论】:
-
代码 400 表示请求错误。所以你在服务器端有无效的语法。
-
请添加处理ajax请求的函数。 python代码。
-
如果尝试使用 curl 访问相同的 URL 会发生什么?
-
您最好检查一下您是在使用本地文件还是在服务器上 - 检查 Firefox URI 是否与其他浏览器上的相同。从 Chrome 复制到 Firefox。
-
@ASSILITaher 因为 Apache 的访问日志没有显示任何传入的请求,如果 Python 代码无论如何都没有被访问,是否有任何用处?如果它有帮助,我会添加它,但请求似乎没有到达服务器
标签: javascript jquery ajax apache firefox