Могу ли я упростить этот вызов ajax с помощью jQuery?

#jquery

#jquery

Вопрос:

У меня есть следующее:

 $.ajax({
    type: "POST",
    traditional: true,
    url: "/Administration/Locations/DoAction",
    data: { partitionKey: id.substring(14),
            rowKey: id.substring(4, 14),
            action: ac,
            datastore: $("#DataSource").val()
    },
    async: false,
    dataType: "json",
    timeout: 1000,
    success: function (data) {
      xx
    },
    error: function (x, t, m) {
      xx
    }
  

Могу ли я упростить это с помощью jQuery для создания post? Обратите внимание, что id и ac являются переменными javascript, назначенными ранее.

Комментарии:

1. Каким образом упростить? Это довольно простой код, но может быть что-то, что можно изменить в контексте вашего другого кода. Не могли бы вы немного подробнее объяснить свой вопрос?

2. Что бы вы хотели упростить там? Для меня это выглядит довольно грубо / просто.

3. async:false противоречит цели ajax.

4. @AlienWebguy: но в некоторых случаях это необходимо.

5. Насколько проще вы хотите? Если вам нужны асинхронные и традиционные, не совсем уверен, что вы ищете.

Ответ №1:

 $.ajaxSetup({async:false});
$.post("/Administration/Locations/DoAction",
    { partitionKey: id.substring(14),
            rowKey: id.substring(4, 14),
            action: ac,
            datastore: $("#DataSource").val()
    },
    function (data) {
      xx
    },
    "json"
).error(function() {
  xx
});
  

Документация http://api.jquery.com/jQuery.post /

$.post() такое же, как

 $.ajax({
  type: 'POST',
  url: url,
  data: data,
  success: success,
  dataType: dataType
});
  

Комментарии:

1. Выглядит хорошо. Я просто проверяю эту ссылку, чтобы посмотреть, как я могу установить async: false. Мне это нужно в данном случае.

2. Спасибо. Я выполняю этот вызов в функции. После того, как я покину функцию, будет ли $.ajaxSetup({async: false}); по-прежнему действовать?

Ответ №2:

В зависимости от вашего приложения вы могли бы использовать глобальный обработчик ошибок и / или successhandler. Однако, скорее всего, только первое. Объедините с ответом от Питера, и все будет готово. Чтобы установить эти глобальные обработчики, используйте

 $.ajaxError(...)
$.ajaxSuccess(...)
  

Смотрите http://api.jquery.com/jQuery.ajaxSetup /. На этой странице есть список способов, в котором перечислены все глобальные ajaxHandler-инициализаторы.

Ответ №3:

Проверьте, работает ли это для вас:

 $.ajax({
type: "POST",
traditional: !0,
url: "/Administration/Locations/DoAction",
data: {
    partitionKey: id.substring(14),
    rowKey: id.substring(4, 14),
    action: ac,
    datastore: $("#DataSource")
        .val()
},
async: !1,
dataType: "json",
timeout: 1e3,
success: function () {},
error: function () {}
})