![](/img/trans.png)
[英]Knockout JS html binding returning weird code instead of html string
[英]AJAX returning a weird HTML file instead of JSON
我正在将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; ?>
我得到的怪异反应是:
我什至不知道这是从哪里来的。 它是XAMPP的HTML文件,这是我用来制作本地服务器的软件包,但我不知道为什么。 试图寻找类似的问题,但没有发现任何东西。
这就是我所做的(或类似的事情)
$.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搜索页面。
希望能帮助到你。
我没有测试您的代码。 但是随着您的错误消息,我可以说些什么...
<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; });
您可以尝试以下方法:
更换
$myJSON = json_encode($arr, JSON_HEX_QUOT | JSON_HEX_TAG);
同
$myJSON = json_encode($arr, JSON_FORCE_OBJECT);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.