AJAX返回奇怪的HTML文件而不是JSON

时间:2018-10-24 21:10:16

标签: javascript php jquery html ajax

我正在将AJAX与jQuery结合使用,试图从数据库中获取响应,但是我什至无法获得正确的JSON响应。响应而不是JSON是XAMPP页面上的HTML代码(我正在使用它来进行本地测试)。

这是jQuery和AJAX的JS代码:

$('#salvar').click(function(e) {
  e.preventDefault();
  var dados = $('buscaCep').serialize();

  $.ajax({
    url: "resposta.php",
    data: dados,
    type: "POST",
    dataType: "json",
    success: function(response) {
      console.log(response);
    },
    error: function(jqxhr, textStatus, errorThrown) {
      console.log("jqXHR: ", jqxhr);
      console.log("textStatus: ", textStatus);
      console.log("errorThrown: ", errorThrown);
    }

  });

  return false;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>

这是“ resposta.php”文件:

<?php

$arr = array();
$arr['cep'] = $_POST['cep'];

$conn = ...
$sql = ...

if ( $conn->ping() ) {
	$arr['connected'] = true;
} else {
	$arr['connected'] = false; 
}

if ( $conn->query($sql) === TRUE ) {
    $arr['xstatus'] = "Created" ;
    $arr['id'] = $conn->insert_id;
} else {
    $arr['xstatus'] = "Error" ;
    $arr['message'] = $conn->error;
}

$myJSON = json_encode($arr, JSON_HEX_QUOT | JSON_HEX_TAG);

echo $myJSON;

?>

我得到的奇怪答复是:

HTML response in AJAX

我什至不知道这是从哪里来的。它是XAMPP的HTML文件,这是我用来制作本地服务器的软件包,但我不知道为什么。试图寻找类似的问题,但没有发现任何东西。

3 个答案:

答案 0 :(得分:0)

这就是我所做的(或类似的事情)

  $.ajax({
    url: "resposta.php",
    data: dados,
    type: "POST",
    dataType: "json",
    always: function(jqxhr, textStatus, errorThrow) {
           try {
                //in the case of a "real" error throw and catch it (DRY like)
                if(errorThrow) throw errorThrow; 
                //in the case we can't parse the JSON response catch that too
                var data = JSON.parse(jqxhr.responseText);

                 /*... other code ...*/

           } catch(e) {
                 console.log("jqXHR: ", jqxhr);
                 console.log("textStatus: ", textStatus);
                 console.log("errorThrown: ", e);
           }
    }
});

即使您碰巧遇到404错误或任何错误,也始终会返回,但是如果您没有发送application/json标头,则浏览器可能不会自行解析JSON数据,但这并不重要,因为您可以尝试解析它,然后在解析失败时可以记录错误。

您可能想出了一种方法来确定页面是否响应404(并将其添加到catch块中,以获取更明智的错误)。我在这里所说的404不是一个实际的404,而是框架中无法解决的路由(我并没有真正注意您使用的是什么),其中一些可能设置了正确的HTTP状态。有些人可能只是显示某种搜索页面,然后就好像一切正​​常。

我曾经(很久以前)发生过这种情况,无论如何响应都会得到200条响应,并且响应中会有一些垃圾HTML搜索页面。

希望有帮助。

答案 1 :(得分:0)

我没有测试您的代码。但是有了您的错误消息,我可以说些什么...

  1. 您的AJAX代码可能在jQuery声明之上。
  2. 使用最新版本的JQuery
  3. 如果使用局部视图,则将AJAX正确包装在脚本部分中

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

<script type="text/javascript">

 $(document).ready(function () {

$('#salvar').click(function(e) {
  e.preventDefault();
  var dados = $('buscaCep').serialize();

  $.ajax({
    url: "resposta.php",
    data: dados,
    type: "POST",
    dataType: "json",
    success: function(response) {
      console.log(response);
    },
    error: function(jqxhr, textStatus, errorThrown) {
      console.log("jqXHR: ", jqxhr);
      console.log("textStatus: ", textStatus);
      console.log("errorThrown: ", errorThrown);
    }

  });

  return false;
});

答案 2 :(得分:0)

您可以尝试以下方法:

替换

$myJSON = json_encode($arr, JSON_HEX_QUOT | JSON_HEX_TAG);

使用

$myJSON = json_encode($arr, JSON_FORCE_OBJECT);