首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ajax POST未到达服务器,仅在Firefox中返回400

Ajax POST未到达服务器,仅在Firefox中返回400
EN

Stack Overflow用户
提问于 2019-05-30 04:59:46
回答 1查看 174关注 0票数 0

我有一个运行在Apache中的Flask服务器,它返回一个HTML页面,其中包含一个按钮,用于向相对URL提交AJAX POST请求。在Firefox中,AJAX调用会立即失败,并显示一个400, POST response ERROR code: 400。将xhr对象或数据参数记录到控制台会生成<unavailable>,其responseText属性为undefined。无论向AJAX传递什么URL,响应都是完全相同的。绝对网址(http://thehostname.com/path/send-email)也会给出相同的结果。

Apache的access.log显示在AJAX请求时没有传入请求。该请求根本不会出现在开发工具的Firefox的“网络”选项卡中。在所有其他条件相同的情况下,该请求在Chrome中运行良好,对于cURL也是如此。

代码如下。请帮帮我!

HTML:

代码语言:javascript
复制
<img width="20px" src="mail.png" alt="" onerror="this.style.display='none'" onclick="sendEmail('val1', 'val2', 'val3')">

JS:

代码语言:javascript
复制
    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终结点:

代码语言:javascript
复制
@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控制台输出:

代码语言:javascript
复制
Val1: myinput
Ret false
POST response ERROR code: 400
POST response ERROR code: 400
Info:
undefined

没有Python输出,因为Apache没有收到请求。

EN

回答 1

Stack Overflow用户

发布于 2019-05-30 06:15:05

400 Bad Request response状态码指示服务器不能或将不会处理请求,原因是认为是客户端错误(例如,错误的请求语法、无效的请求消息帧或欺骗性的请求路由)。“send-email”指向哪里?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56368435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档