У меня не было никакого успеха в решении заголовка - они никогда не были получены в моем методе ajaxSuccess / ajaxComplete. Я использовал ответ Штега с пользовательским ответом, но я немного изменил сторону JS. Я настраиваю метод, который я вызываю в каждой функции, поэтому я могу использовать стандартные методы $.get
и $.post
.
function handleAjaxResponse(data, callback) {
//Try to convert and parse object
try {
if (jQuery.type(data) === "string") {
data = jQuery.parseJSON(data);
}
if (data.error) {
if (data.error == 'login') {
window.location.reload();
return;
}
else if (data.error.length > 0) {
alert(data.error);
return;
}
}
}
catch(ex) { }
if (callback) {
callback(data);
}
}
Пример использования в нем ...
function submitAjaxForm(form, url, action) {
//Lock form
form.find('.ajax-submit').hide();
form.find('.loader').show();
$.post(url, form.serialize(), function (d) {
//Unlock form
form.find('.ajax-submit').show();
form.find('.loader').hide();
handleAjaxResponse(d, function (data) {
// ... more code for if auth passes ...
});
});
return false;
}
Согласно эта запись в блоге , необходимо использовать "Item[]"
. Причем объект является названием свойства, сгенерированного компилятором при использовании индексатора.
, Если Вы хотите быть явными, можно украсить свойство индексатора атрибут IndexerName.
, Который заставил бы код быть похожим:
public class IndexerProvider : INotifyPropertyChanged {
[IndexerName ("Item")]
public object this [string key] {
get {
return ...;
}
set {
... = value;
FirePropertyChanged ("Item[]");
}
}
}
, По крайней мере, это делает намерение более ясным. Я не предлагаю, чтобы Вы изменили имя индексатора, хотя, если бы Ваш приятель нашел строку "Item[]"
твердой кодированный, это, вероятно, означает, что WPF не был бы в состоянии иметь дело с другим именем индексатора.
На самом деле, я считаю, что установка атрибута IndexerName в значение "Item" является излишней. Атрибут IndexerName специально предназначен для переименования индекса, если вы хотите дать его элементу коллекции другое имя. Таким образом, ваш код может выглядеть примерно так:
public class IndexerProvider : INotifyPropertyChanged {
[IndexerName("myIndexItem")]
public object this [string key] {
get {
return ...;
}
set {
... = value;
FirePropertyChanged ("myIndexItem[]");
}
}
}
После того, как вы установите имя индексатора в любое нужное вам значение, вы можете использовать его в событии FirePropertyChanged.