SORU
16 Ocak 2011, Pazar


ASP.NET MVC Ajax Hata işleme

Nasıl özel durumlar jquery ajax bir eylem çağırdığında denetleyicisi atılan yapmalıyım?

Örneğin, özel durum iletisi hata ayıklama modunda veya normal hata mesajı görüntüleyen bir ajax arama sırasında sunucu hariç her türlü sonucuyla küresel bir javascript kodu istiyorum.

İstemci tarafında ajax hatası işlevi arayacağım.

Sunucu tarafında özel bir actionfilter yazmak gerekiyor mu?

CEVAP
16 Ocak 2011, Pazar


Eğer sunucu gönderirse bazı durum kodu 200, hata geri arama daha farklı yürütülür:

$.ajax({
    url: '/foo',
    success: function(result) {
        alert('yeap');
    },
    error: function(XMLHttpRequest, textStatus, errorThrown) {
        alert('oops, something bad happened');
    }
});

ve bir genel hata işleyicisi kaydetmek için $.ajaxSetup() yöntemi kullanabilirsiniz:

$.ajaxSetup({
    error: function(XMLHttpRequest, textStatus, errorThrown) {
        alert('oops, something bad happened');
    }
});

Başka bir yol JSON kullanmak. Özel durum yakalar ve JSON yanıt içine dönüştüren sunucu üzerinde özel bir eylem filtre yazabilirsiniz:

public class MyErrorHandlerAttribute : FilterAttribute, IExceptionFilter
{
    public void OnException(ExceptionContext filterContext)
    {
        filterContext.ExceptionHandled = true;
        filterContext.Result = new JsonResult
        {
            Data = new { success = false, error = filterContext.Exception.ToString() },
            JsonRequestBehavior = JsonRequestBehavior.AllowGet
        };
    }
}

ve sonra bu öznitelik ile eylem: kumandanız süsleyin

[MyErrorHandler]
public ActionResult Foo(string id)
{
    if (string.IsNullOrEmpty(id))
    {
        throw new Exception("oh no");
    }
    return Json(new { success = true });
}

ve nihayet, harekete geçirmek:

$.getJSON('/home/foo', { id: null }, function (result) {
    if (!result.success) {
        alert(result.error);
    } else {
        // handle the success
    }
});

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Abbeydabby0277's channel

    Abbeydabby02

    9 ŞUBAT 2012
  • FND Films

    FND Films

    2 Mayıs 2006
  • xdadevelopers

    xdadeveloper

    25 Aralık 2009