我能从jQuery的加载(url)中获取响应的成功/错误反馈吗?

时间:2011-02-15 15:59:17

标签: javascript jquery

我基本上使用的是一个使用jQuery load(url)函数的插件。

由于 .load()允许你使用带有响应作为参数的回调函数,我想知道是否有一种方法可以嵌入,例如,一个表明错误或成功的变量文件 .load()正在调用?

在调用的文件中,您可以使用类似$.myPlugin.response = "An error occured"的内容,并且回调函数将能够读取它(至少在Firefox中)。然而问题是$.myPlugin.response现在是全局的,如果我们同时制作两个 .load(),我们将无法判断哪个调用变坏了。

有没有办法在回调函数中包含此错误变量,或者至少在比全局范围更紧密的范围内?

一种方法是使用正则表达式解析响应并查找特定表达式,但这不是正确的方法。

自定义标题的使用能以某种方式解决吗?

我希望这个问题有道理

干杯

2 个答案:

答案 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))