javascript - 单击 html 按钮时使用 javascript 将 json 数据发送到托管的 python Flask api,并在 HTML 标签上打印 API 的响应

标签 javascript python jquery html json

我在 pythonanywhere 上托管了一个 python Flask api。它接受 json 输入,执行一些操作并以 json 格式返回响应。

我有一个网站尝试调用此 API 并且应该显示响应。

按钮点击调用 JavaScript 函数 apicall()。

HTML 代码:

<button type="submit" name = "submit" id = "submit" onclick="apicall()">Check</button>
<label id="response"></label>

Javascript 函数(它尝试将标签文本设置为响应文本):

<script type="text/javascript">
function apicall(){ 

  xmlObj = new XMLHttpRequest(); //suddenly global scope
  xmlObj.open("POST","http://abc.pythonanywhere.com/xyz",true);
  xmlObj.setRequestHeader("Content-Type", "application/json");
  var website=document.getElementById("url").value;
  var data = JSON.stringify({"url": website});
  xmlObj.send(data);
  xmlObj.onreadystatechange = handleRequestStateChange();
  function handleRequestStateChange(){  
  alert("here");
  if(xmlObj.readyState == 4 && xmlObj.status==200){
    var json = JSON.parse(xmlObj.responseText);
    document.getElementById("response").innerHTML =json.prediction;
    alert("if loaded");
  }
  else
  {
      alert(xmlObj.status);
  }
 }
}
</script>

但是,它会警告状态 0。

控制台上打印的错误显示: “[CORS]源站在 http://abc.pythonanywhere.com/xyz 的跨源资源请求头中的 access-control-allow-origin 中未找到源点”

开发者工具中的“网络”选项卡显示与任意位置的 python 连接以及响应代码 200[ok]

引用链接:

Why is AJAX returning HTTP status code 0?

XMLHttpRequest status 0 (responseText is empty)

但没能解决问题

我也尝试过jquery来做同样的事情

<script>
        $(document).ready( function() {
        $('#submit').click(function() {
           var website=document.getElementById("url").value;
           $.ajax({
                type: 'POST',
                contentType: 'application/json',
                data: JSON.stringify(website),
                dataType: 'json',
                url: 'http://abc.pythonanywhere.com/xyz',
                success: function (e) {
                   alert(e);
                   console.log(e);
                   window.location = "https://www.google.com"
                },
                error: function(error) {
                console.log(error);
            }
            });
        });
  });
</script>

但是当我单击该按钮时,jquery 代码只是重新加载页面,没有任何错误(或者可能错误日志和网络日志只是因为重新加载而被清除)。

如何允许 python API 上的跨源请求,或者如何更改 javascript 或 jquery 中的代码以使此功能正常工作?

最佳答案

我能够通过将以下行添加到 python Rest API 来解决这个问题。

pip install -U Flask-cors

from flask_cors import CORS
cors = CORS(app)

关于javascript - 单击 html 按钮时使用 javascript 将 json 数据发送到托管的 python Flask api,并在 HTML 标签上打印 API 的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60918799/

相关文章:

javascript - 有渲染 2d 键盘的 JavaScript 库吗?

python - Beautifulsoup:findAll 递归不起作用

python - 处理来自同一事件循环的 SimpleXMLRPCServer 调用和 Asyncore.dispatchers 事件

javascript - 解析 JavaScript 数组

javascript - 用 AJAX 响应中的内容替换网页内容

javascript - 动态调整 ag-Grid header 高度

python - 如何使用 python file.py 从命令行运行类?

javascript - 像在 stackoverflow 中一样创建多个下拉菜单

javascript - 我如何使用 datepicker jquery 突出显示特定日期

javascript - 没有选择器的 JQuery?