2015-06-30 5 views
3

Я написал этот сценарий для проверки не является ли мелкая наличность уже указана или не использовать AJAX ...Возврат значения из функции с помощью AJAX

function GetPettyCash() { 
     $.ajax({ 
      type: 'GET', 
      url: '@Url.Action("CashSet", "POS")', 
      contentType: 'application/json; charset=utf-8', 
      success: function (data) { 
       if (data["CashSetIn"] == "true") { 
        alert(data["CashSetAmount"]); 
        return true; 
       } 
       else { 
        alert(data["CashSetIn"]); 
        return false; 
       } 

      }, 
      error: function (req, status, errorObj) { 
       alert(errorObj.toString()); 
       return false; 
      } 
     }); 
    } 

Я написал этот контроллер для моей Ajax-вызовы:

[HttpGet] 
    public JsonResult CashSet() 
    { 
     Login login = new Login(); 
     login.CheckPettyCash(); 
     if (login.CashInSet == true) 
     { 
      return Json(new 
      { 
       CashSetIn = "true", 
       CashSetAmount = login.CashInAmount 

      },JsonRequestBehavior.AllowGet); 
     } 
     else 
     { 
      return Json(new 
      { 
       CashSetIn = "false", 
       CashSetAmount = "0" 
      }, JsonRequestBehavior.AllowGet); 
     } 
    } 

мой контроллер возвращает этот JSON:

{"CashSetIn":"true","CashSetAmount":1000} 

Но моя функция в сценарии JS всегда возвращает Undefine d ... Любое предложение о том, как исправить это?

Я попытался тестирования:

alert(data["CashSetAmount"]); 
//the Result: 1000 

alert(data["CashSetIn"]); 
//the Result: true 

alert(data); 
//the Result: [object Object] 
+0

сделать 'предупреждение (данные)' 'внутри успеха: функция (данные) {' ANS увидеть, что у получить. Можете ли вы поделиться этим? вы получаете какие-либо данные? –

+0

Я сделал некоторые изменения .. –

+0

Является ли 'login.CashInAmount' определенным в' CashSetAmount = login.CashInAmount'? – guest271314

ответ

1

$.ajax не дожидаясь запроса AJAX, чтобы вернуться. Вместо этого он запускает запрос и продолжается. Если вы изменили функцию

function GetPettyCash() { 
     $.ajax(//... 
     ); 
     return true; 
    } 

Это будет всегда возвращать true. Возвращаемые значения, которые вы указываете, являются возвращаемыми значениями для анонимных функций обратного вызова, которые вы определили с помощью ключевого слова function.

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

Например, вы могли бы сделать что-то вроде этого:

function GetPettyCash() { 
     $.ajax({ 
      type: 'GET', 
      url: '@Url.Action("CashSet", "POS")', 
      contentType: 'application/json; charset=utf-8', 
      success: function (data) { 
       if (data["CashSetIn"] == "true") { 
        do_something_with_petty_cash(true); 
       } 
       else { 
        do_something_with_petty_cash(false); 
       } 

      }, 
      error: function (req, status, errorObj) { 
       alert(errorObj.toString()); 
       return false; 
      } 
     }); 
    } 
function do_something_with_petty_cash(petty_cash) { 
     if (petty_cash) 
      // ... 
    } 
+0

ok Я попробую это. –

+0

О, мой БОГ !!!! он работает ... СПАСИБО ОЧЕНЬ МНОГО !!!! –

+0

кстати .. можно ли ждать AJAX как '$ (AJAX) .ready()'? –

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