我有一个网页,当用户点击某个特定元素时,会触发一个javascript函数,该函数使用$ .post()(即jquery)将用户的数据发送到修改数据库的PHP脚本。 成功后,PHP页面只会打印
<p id='success'>Yay!</p>
失败时,会打印:
<p id='failure'>$some_error_message</p>
$ .post的回调部分会检查其中哪一个存在。成功时,它只显示现有(当前隐藏)元素。失败时,我想抓住$ some_error_message位,并把它放在我的页面上。
我找到了一种方法(如下所示),但它很笨重 - 我确信当我只想访问单个元素时,我不应该使用“.each”函数。有没有更好的方法呢?
$.post('myURL.php', myData, function(retData)
{
if ( $(retData).filter('#success') )
{
$('#mySuccessDiv').show(200);
}
else if ($(retData).filter('#failure') )
{
$(retData).filter('#failure').each(function()
{
$('#myErrorDiv').html($(this).html());
});
}
else
$('#myErrorDiv').html("Unspecified Error");
}, "html");
正如我所说,使用.each似乎很浪费,但我不能简单地使用
$('#myErrorDiv').html($(retData).filter('#failure').html());
因为.filter返回一系列对象。但同样,我无法弄清楚如何只访问元素0(因为我在ID上过滤,只能有一个匹配)。我试过了:
$('#myErrorDiv').html($(retData).filter('#failure')[0].html());
但它并不喜欢。
我被迫使用.each,还是我真的很钝?
答案 0 :(得分:2)
.filter()将返回一个jQuery对象(带或不带任何元素),所以它总是很简单,看它是否返回了你需要检查返回的jQuery对象长度的任何元素
$.post('myURL.php', myData, function (retData) {
var $obj = $(retData);
if ($obj.filter('#success').length) {
$('#mySuccessDiv').show(200);
} else if ($obj.filter('#failure').length) {
$('#myErrorDiv').html($obj.html());
} else {
$('#myErrorDiv').html("Unspecified Error");
}
}, "html");
另一种解决方案是使用.is()
$.post('myURL.php', myData, function (retData) {
var $obj = $(retData);
if ($obj.is('#success')) {
$('#mySuccessDiv').show(200);
} else if ($obj.is('#failure')) {
$('#myErrorDiv').html($obj.html());
} else {
$('#myErrorDiv').html("Unspecified Error");
}
}, "html");