我正在使用ajax函数来接收数据。根据该数据,如果找不到结果,我会收到一个字符串“找不到匹配项”,并带有一些html格式。如果有结果,则将数据格式化为表格,并隐藏此部分下方的“Div”部分。
现在我遇到的问题是,当我发现没有结果时,我不希望这个“Div”表消失。但是为了检查是否没有结果,我将不得不比较searchCustomer收到的整个字符串.php(非常大)。
有更简单的方法吗?
我的ajax电话:
$('#search').click(function(e){
$.ajax({
type : 'GET',
url : 'searchCustomer.php',
dataType :'html',
data:{
lastName : $('#search_LN').val(),
firstName : $('#search_FN').val(),
phone : $('#search_PN').val()
},
success : function(data){
if (data.error == true){
alert("there was an error in the post layer");
} else {
$('#searchResults').html(data);
if (data.text == '<br><font color='red'>No matches found</font>'){
}else{
var ele = document.getElementById("NewCustomerDiv");
ele.style.display = "none";
}
}
}
});
return false;
});
运行火虫, 从searchCustomer.php收到的实际数据是:
<style type="text/css">
a.resultBookButton {
color: black;
padding: 1px;
border: 2px outset lightgrey;
background: #008800;
/* Mozilla: */
background: -moz-linear-gradient(top, lightgrey, #FFFFFF);
/* Chrome, Safari:*/
background: -webkit-gradient(linear,
left top, left bottom, from(lightgrey), to(#FFFFFF));
text-decoration: none;
}
a:active {
border-style: inset;
}
</style>
<br><font color='red'>No matches found</font>
我只想查看“未找到匹配项”或是否有更好的方法找不到结果。
答案 0 :(得分:5)
是的,请返回JSON。您可以将响应结构化为:
{
count: 0,
content: "your html here"
}
然后,您可以通过data.count
查看计数。您的服务器需要根据找到的结果数量来设置它。
您需要在ajax调用中将dataType属性设置为JSON
。
答案 1 :(得分:2)
我不同意Brad,转换为JSON会很痛苦,因为所有使用引号的HTML都必须将这些引号转义才能使用JSON字符串,这样可能会产生最大的烦恼和意外在最坏的情况下触发无效JSON的错误。
理想的解决方案是改变那些页面返回的内容。如果找到项目则返回完整的HTML,如果找不到任何内容则返回“0”或“”,然后检查这些返回。
如果您无法更改从AJAX调用返回的内容,可能只需执行一个(returnedData.indexOf(“
轻松自负。
修改强>
$.ajax({
... other setting ...
success : function(data){
(data.indexOf('<table') == -1){
//there was a table in the returned data
} else {
// ...
}
}
});
答案 2 :(得分:0)
AJAX响应应包含易于解析的格式的原始数据,例如JSON或XML。收到响应后,AJAX成功处理程序应解析响应并生成必要的HTML以供显示。 searchCustomer.php
不应该生成HTML ...您的成功处理程序应该。
如果以这种方式设计,它可以让您灵活地显示所需的数据,因此您可以在网站的任何位置重复使用此AJAX功能(甚至可以将其公开地提供给Internet上的其他人使用)
JSON:
{
results: [
"result1",
"result2"
]
}
XML:
<results>
<result>result1</result>
<result>result2</result>
</results>