Проблема асинхронного вызова AJAX - PullRequest
1 голос
/ 04 октября 2010

У меня есть функция вызова jjery Ajax, которую я использую для отправки формы в базу данных для сохранения. Также используйте это, чтобы получить данные с сервера и показать пользователю. Когда я публикую \ сохраняю данные формы, я должен показать результат публикации пользователю независимо от того, произошла ошибка или нет.

Все работает нормально, если я работаю в синхронном режиме. Я получаю данные, если хочу, или получаю результат после публикации, используя этот единственный метод.

Но, похоже, он не работает в асинхронном режиме.

Как передать данные обратно вызывающей стороне? Веб-сервис возвращает данные правильно. Смотрите предупреждение () у меня есть. Он показывает мне данные.

Как я могу получить данные и показать их пользователю, опубликовать данные и показать результат пользователю в асинхронном режиме? Нужно ли создавать 2 отдельные функции: одну для получения, а другую для публикации?

Вот функция:

function MakeAjaxCall(svr, webmethod_name, op, btn, rslt, bGetData) {
   var data = "";
   var args = '';
   var l = arguments.length;
   if (l > 7) { for (var i = 7; i < l - 1; i += 2) { if (args.length != 0) args += ','; args += '"' + arguments[i] + '":"' + arguments[i + 1] + '"'; } }

   var surl = "http://<myserver>/" + svr + '.aspx';
   $.ajax({
      type: "POST",
      async: (op == "sync") ? false : true,
      url: surl + "/" + webmethod_name,
      data: "{" + args + "}",
      contentType: "application/json; charset=utf-8",
      dataType: "json",
      success: function ShowSuccess(res) {
         //alert('dfx res:'+res.d);//THIS SHOWS THE DATA FROM SQL CALL FINE
         data = res.d;
      },
      fail: function ShowFail(xhr) {         
         data = "ERROR";
      }
   });
}

1 Ответ

3 голосов
/ 04 октября 2010

Добавить функцию обратного вызова? Например.,

function MakeAjaxCall(svr, webmethod_name, op, btn,
                      rslt, bGetData, callbackFunction) {
   //removed for brevity

   var surl = "http://<myserver>/" + svr + '.aspx';
   $.ajax({
      //removed for brevity
      success: function ShowSuccess(res) {
         //pass the data to the callbackFunction
         callbackFunction(res.d);
      },
      //etc.
   });

Затем просто передайте имя функции (или анонимную функцию) в функцию MakeAjaxCall, например:

//anonymous function
MakeAjaxCall(svrVal, somewebmethod_name, opVal, btnVal,
                      rsltVal, bGetDataVal, function(data) { alert(data); });

//named function
MakeAjaxCall(svrVal, somewebmethod_name, opVal, btnVal,
                      rsltVal, bGetDataVal, alert)
...