簡體   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