【问题标题】:AJAX POST request returns HTML code in alert()AJAX POST 请求在 alert() 中返回 HTML 代码
【发布时间】:2020-09-13 01:54:02
【问题描述】:

我有这个 AJAX post 请求:

$.ajax({
   type: 'post',
   url: 'gestioneFotografie.php', //The current page
   contentType: "application/json; charset=utf-8",
   data: {
      lat: lat,
      lng: lng
   },
   dataType: 'text',   
   success: function(data) {
      alert(data);
   }
});

问题是警报看起来像这样:

【问题讨论】:

  • 那么你在回帖中返回了什么?
  • 所以你的 php 文件返回了一个完整的 html 文档,这就是警报显示的内容。如果您不想要 html,请不要返回 html。
  • 发帖页面和回复页面是一样的(cf.comment "//The current page")。我想PHP代码中一定有一个错误。它应该优先处理 AJAX POST 请求(如果有),然后退出并返回文本字符串(无 HTML 输出)。
  • 如果你发布 JSON,你需要JSON.stringify()data
  • @Éric jQuery 只会将对象字符串化为application/x-www-form-urlencoded 格式。 OP 已指定 application/json 的内容类型,因此他们应该使用 data: JSON.stringify({ lat, lng })

标签: jquery json ajax post alert


【解决方案1】:

我从您的评论//The current page 了解到gestioneFotografie.php 既是发帖页面又是回复页面。
因此gestioneFotografie.php主要是一个HTML接口,它额外处理用AJAX发布的数据自己发给自己

您期望一个原始文本字符串作为响应,正如 dataType: 'text' 所暗示的那样,并且我知道您正在使用一个简单的 alert() 函数来显示响应。

警报框显示 HTML 的事实让我假设 gestioneFotografie.php 在以下一个或几个步骤中失败:

  1. 捕捉发布的数据
  2. 处理它们(在安全检查之后)
  3. 输出原始文本响应
  4. exit 在输出任何其他内容(包括 HTML)之前

总之,您应该确保gestioneFotografie.php 具有与此类似的全局结构:

<?php
if ( isset($_POST['lat'], $_POST['lng'])   &&   mySanityCheck($_POST['lat'], $_POST['lng']) === 'safe' ) {
    $string = myDataProcessor($_POST['lat'], $_POST['lng']);
    exit($string);
}

// The rest of the code, including default HTML.
?>

【讨论】:

    猜你喜欢
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-05
    • 2022-01-20
    • 1970-01-01
    相关资源
    最近更新 更多