我基本上使用的是一个使用jQuery load(url)
函数的插件。
由于 .load()允许你使用带有响应作为参数的回调函数,我想知道是否有一种方法可以嵌入,例如,一个表明错误或成功的变量文件 .load()正在调用?
在调用的文件中,您可以使用类似$.myPlugin.response = "An error occured"
的内容,并且回调函数将能够读取它(至少在Firefox中)。然而问题是$.myPlugin.response
现在是全局的,如果我们同时制作两个 .load(),我们将无法判断哪个调用变坏了。
有没有办法在回调函数中包含此错误变量,或者至少在比全局范围更紧密的范围内?
一种方法是使用正则表达式解析响应并查找特定表达式,但这不是正确的方法。
自定义标题的使用能以某种方式解决吗?
我希望这个问题有道理
干杯
答案 0 :(得分:1)
让我们从documentation for .load():
中的一个示例开始<!DOCTYPE html>
<html>
<head>
<style>
body{ font-size: 12px; font-family: Arial; }
</style>
<script src="http://code.jquery.com/jquery-1.5.js"></script>
</head>
<body>
<b>Successful Response (should be blank):</b>
<div id="success"></div>
<b>Error Response:</b>
<div id="error"></div>
<script>
$("#success").load("/not-here.php", function(response, status, xhr) {
if (status == "error") {
var msg = "Sorry but there was an error: ";
$("#error").html(msg + xhr.status + " " + xhr.statusText);
}
});
</script>
</body>
</html>
现在我们将修改脚本处理Web服务器或CGI脚本返回的自定义错误:
<script>
$("#success").load("/not-here.php", function(response, status, xhr) {
if (status == "custom_error") {
// the handler for custom_error goes here
}
});
</script>
答案 1 :(得分:0)
每当Ajax调用以错误响应结束时,您都可以告诉jQuery调用函数(参见ajaxSetup):
$.ajaxSetup({
error: function(xhr, textStatus, errorThrown) {
alert(xhr.responseText)
}
});
当然,您必须返回一个HttpServerError来实现此结果(如何执行此操作取决于服务器端框架)。
E.g。使用Django:
from django.http import HttpResponse, HttpResponseServerError
def myAjaxCall(request):
""" Return the result if present;
if not present, return an error with the string "No value to return"
in case of any other error, return the error with its text.
"""
try:
value = compute_my_value(request)
if not value:
raise Exception, 'No value to return!'
return HttpResponse(value, mimetype="application/json")
except Exception, e:
return HttpResponseServerError(unicode(e))