2014-01-23 4 views
0

У меня есть этот вызов Ajax. Если пользователь успешно войдет в систему, я хочу запустить OnSuccess(). Но если нет, не запускайте его.Как условно запустить OnSuccess

Прямо сейчас, он всегда работает, потому что вызов Ajax действительно не сработал. Это удалось, насколько это делает вызов был обеспокоен, но пользователь на самом деле не вошли в систему, поэтому я не хочу, чтобы запустить его еще ..

@using (Ajax.BeginForm("ProcessDownloadLogin", "Order", new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = "content", OnFailure = "openErrorWindow()", OnSuccess= "getReport()" })) 
    {... 

Так как же я условно запустить OnSuccess?

ответ

1

Вы не должны использовать OnSuccess для определения поведения, подобного этому. OnSuccess должен только определить, был ли вызов Ajax успешным. Вы хотите сохранить эту логику. В противном случае вы создаете хак, который будет трудно поддерживать и работать для более поздних разработчиков или вас самих. Передайте результат JSON, у которого есть определенный флаг, если они не вошли в систему. Таким образом, вы можете справиться с любой ситуацией по мере появления новых обстоятельств. Фокс пример:

На сервере: со стороны

Public JsonResult SomeMethod() 

// some code here 

return Json({loggeddIn: true}, JsonRequestBehavior.AllowGet); 

И Клиент:

$.ajax({ 
    url: "/SomeController/SomeMethod", 
    type: "POST", 
    data: parameters, 
    success: function(result) 
{ If (result.loggedIn == true) { 
//Do logged in code 
} 
Else { 
    // do code for not logged in users... like redirect them to login page 
} }); 
+0

ОК, это выглядит как то, что мне нужно. –

0

Измените код состояния ответа на что-то вроде 401 Несанкционированный, тогда вы сможете позвонить в OnFailure.

В качестве альтернативы, если вы не хотите, чтобы запрос был сбой, просто измените код состояния на что-то вроде 204 No Content и проверьте код состояния в вашей функции OnSuccess.

Смежные вопросы