我有一个以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>
我在不同的位置显示结果,因此需要区分可能的结果。
答案 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);
}
或者就此而言,在您开始时首先添加一个虚拟元素,其中包含结果(例如,<div class='good'></div>
与<div class='bad'></div>
)。