如何区分HTML中的ajax结果

时间:2011-11-18 23:52:09

标签: jquery ajax

我有一个以HTML格式返回结果的ajax调用。如果请求是好的,它将返回HTML中的联系人列表;否则它应该返回验证错误。两种方案都返回HTML。

问题是:如果对服务器的请求成功,我无法判断结果是验证错误还是联系人列表。我需要知道,所以我可以相应地操纵我的HTML:

        $.ajax({
            type: 'POST',
            [snip]
            success: function(response) {
                 // here I need to tell if there was a validation error
                 // or the request succeeded
            }

例如,良好请求的HTML可能看起来像......

<tbody>
    <tr>
        <td>@contact-name</td>
    <tr>
</tbody>

虽然糟糕的请求看起来像......

<ul>
    <li>Please fix some error</li>
</ul>

我在不同的位置显示结果,因此需要区分可能的结果。

5 个答案:

答案 0 :(得分:2)

您可以在json中对响应进行编码,并使用代码发送,告知请求是否成功。

答案 1 :(得分:1)

这是一个想法:

如果您返回带有成功标记的JSON对象和HTML内容,则可以知道HTML的放置位置。

JSON看起来像这样:

{
  success: true,
  html: "<ul><li>Html here</li></ul>"
}

答案 2 :(得分:1)

执行此操作的正确语义方式是使用HTTP标头。如果错误是找不到联系人,请发出404 Not Found状态代码。这将触发error处理程序而不是success处理程序,因此您可以区分并运行不同的代码。

答案 3 :(得分:1)

您可以让服务器在状态文本中返回具有问题性质的自定义2xx状态代码。

由于验证响应是成功的响应,因此您希望使用200系列代码,并使用自定义状态代码可以区分该类型的响应与所有其他潜在响应。

答案 4 :(得分:1)

如果您不想转移到JSON,并且您不想使用不同的状态代码,则根据您的标记,您可以根据第一个元素的标记名称进行区分:

success: function(response) {
    var elements = $(response);
    if (elements[0].tagName.toUpperCase() === "UL") {
        // ...bad response...
    }
    else {
        // ...good response...
    }

    // Display it either way (in our case, we just append, but you'll probably
    // put them in different places)
    elements.appendTo(document.body);
}

Live example

或者就此而言,在您开始时首先添加一个虚拟元素,其中包含结果(例如,<div class='good'></div><div class='bad'></div>)。