Как зафиксировать ошибку в загрузке jQuery () метод

С моей точки зрения, вы правильно используете сопрограмму. Несколько замечаний:

  • Вам не нужно передавать view: MyView в конструктор и присваивать его значение свойству в блоке init. Вместо этого вы можете пометить параметр view в конструкторе как val, и он станет свойством: функция

    class MyPresenter(private val view: MyView,
                      private val coroutineCtx: CoroutineContext = Dispatchers.Main) : CoroutineScope {
    
        // you can get rid of the next lines:
        private var view: MyView? = null
        init {
            this.view= view
        }
    
    }
    
  • launch возвращает значение Job. Вы можете добавить функцию расширения, например, launchSilent, чтобы вернуть Unit:

    fun CoroutineScope.launchSilent(
        context: CoroutineContext = EmptyCoroutineContext,
        start: CoroutineStart = CoroutineStart.DEFAULT,
        block: suspend CoroutineScope.() -> Unit
    ) {
         launch(context, start, block)
    }
    
  • Из моих наблюдений job.cancel() работает правильно: когда вы вызываете его, сопрограмма должна остановиться. Например, если мы поместим несколько журналов:

    fun updateData() = launch{
        Log.d("Tag", "launch start")
        val scanResult = repo.updateData()
        when(scanResult) {
            success -> { this.view.showSuccess()}
        }
        Log.d("Tag", "launch end")
    }
    

    и добавим некоторую задержку в функцию репо updateData():

    suspend fun updateData(): Result<Void> {
       delay(5000)
       val response = API.update().await()
       return response
    }
    

    И, например, во фрагменте после вызова presenter.updateData() ] мы называем что-то вроде Handler().postDelayed({ presenter.stopUpdate() }, 3000), мы не увидим «конец запуска» в журнале Logcat .

  • [Тысяча сто двадцать семь]
50
задан Tot Zam 5 April 2017 в 05:36
поделиться

4 ответа

load () документация.

Просто небольшая справка о том, как происходит ошибка загрузки ...

$("body").load("/someotherpath/feedsx.pxhp", {limit: 25}, 
    function (responseText, textStatus, req) {
        if (textStatus == "error") {
          return "oh noes!!!!";
        }
});

Редактировать: Добавлен путь, отличный от корневого пути, как того требуют комментарии.

76
ответ дан cgp 7 November 2019 в 10:54
поделиться

Помимо передачи обратного вызова в функцию load (), как предлагает Ólafur Waage, вы также можете зарегистрировать «глобальные» обработчики ошибок (глобальный, как глобальный для всех вызовов ajax на странице).

Существует по крайней мере два способа регистрации глобальных обработчиков ошибок Ajax:

Зарегистрируйте только обработчик ошибок с помощью ajaxError () :

$.ajaxError(function(event, request, settings) {
      alert("Oops!!");
});

Или используйте ajaxSetup () для одновременной установки обработчика ошибок и других свойств:

$.ajaxSetup({
    timeout: 5000,
    error: function(event, request, settings){
        alert("Oops!");
    }
});
11
ответ дан matt b 7 November 2019 в 10:54
поделиться

load () предлагает обратный вызов.

Обратный вызов.
Функция вызывается, когда запрос ajax завершен (не обязательно успех).

Вот как это сделано IIRC. (не проверял)

$("#feeds").load("feeds.php", {limit: 25}, 
    function (responseText, textStatus, XMLHttpRequest) {
        // XMLHttpRequest.responseText has the error info you want.
        alert(XMLHttpRequest.responseText);
});
6
ответ дан Ólafur Waage 7 November 2019 в 10:54
поделиться

В электроинструменте есть статья под названием «Загрузка контента с помощью jQuery AJAX и устранение сбоев» , в которой Похоже, что он отвечает на ваш вопрос.

Очевидно, что указанная вами функция обратного вызова получает объект response, status и XmlHttpRequest, что позволяет вам определять состояние вашего запроса ajax и соответствующим образом обрабатывать условие.

0
ответ дан vezult 7 November 2019 в 10:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: