繁体   English   中英

有什么更干净/更好的方法来解析ajax成功函数接收到的数据?

[英]What is a cleaner / better way of parsing data received by an ajax success function?

我正在使用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>

我只想检查“找不到匹配项”,或者是否有更好的找不到结果的方法。

是的,请返回JSON。 您可以将响应结构为:

{
  count: 0,
  content: "your html here"
}

然后,您可以通过data.count检查计数。 您的服务器将需要根据找到的结果数进行设置。

您将需要在ajax调用中将dataType属性设置为JSON

我不同意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 {
                // ...
           }
        }
      });

AJAX响应应包含易于解析的格式的原始数据,例如JSON或XML。 收到响应后,AJAX成功处理程序应解析响应并生成必要的HTML以显示。 searchCustomer.php不应生成HTML ...您的成功处理程序应该。

如果以此方式设计,它可以让您灵活地显示所需的数据,因此您可以在网站的任何位置重复使用此AJAX功能(甚至可以将其公开提供给Internet上的其他人使用)。

JSON:

{
  results: [
    "result1",
    "result2"
  ]
}

XML:

<results>
  <result>result1</result>
  <result>result2</result>
</results>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM