2015-06-09 3 views
0

У меня есть блок if-else, который анализирует ввод пользователя перед тем, как сделать http.get() на сервере. Однако if-else продолжает пропущен. Я попытался переставить код, чтобы заставить его завершить if-else перед вызовом get(), но ничего не работает. Я также использую AngularJS.Javascript async пропускает if-else

//controller 
function search($scope, $http, $location) 
{ 
    function parse(item) 
    { 
     if(item.match(/str1/g)) 
     { 
     item = item.replace(/str1/g, 'one'); 
     } 

     else if(item.match(/str2/g)) 
     { 
     item = item.replace(/str2/g, 'two'); 
     } 

     else if(item.match(/str3/g)) 
     { 
     item = item.replace(/str3/g, 'three'); 
     } 

     //ad infinitum 
     return item; 
    } 

    $http.get('/search='+ parse($location.search().query.toLowerCase())) 
     .success(function(data) { 
      $scope.count = data.length; 
      $scope.items = data; 
      $scope.exists = data.length > 0; 
     }) 
     .error(function(err) { 

     }); 
} 
+0

Я думаю, вам нужно узнать о ['return' statements] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/return). –

ответ

1

Вы не возвращаются item в вашей parse() функции. Ваша функция parse() обрабатывается как строка, но нет возвращаемого значения.

В конце вашей функции должно быть возвращение, например, так:

function parse(item) 
{ 
    if(item.match(/str1/g)) 
    { 
    item = item.replace(/str1/g, 'one'); 
    } 

    else if(item.match(/str2/g)) 
    { 
    item = item.replace(/str2/g, 'two'); 
    } 

    else if(item.match(/str3/g)) 
    { 
    item = item.replace(/str3/g, 'three'); 
    } 

    //ad infinitum 

    return item; 

} 

Читайте на return отчетности здесь: http://www.w3schools.com/jsref/jsref_return.asp

Другой способ сделать то, что вы пытаетесь сделать, просто не создавая локальную parse() функции и просто делать обработку непосредственно в search() объеме строки:

function search($scope, $http, $location) 
{ 
     var item = $location.search().query.toLowerCase(); 

     if(item.match(/str1/g)) 
     { 
     item = item.replace(/str1/g, 'one'); 
     } 

     else if(item.match(/str2/g)) 
     { 
     item = item.replace(/str2/g, 'two'); 
     } 

     else if(item.match(/str3/g)) 
     { 
     item = item.replace(/str3/g, 'three'); 
     } 

     //ad infinitum 

    $http.get('/search='+ item) 
     .success(function(data) { 
      $scope.count = data.length; 
      $scope.items = data; 
      $scope.exists = data.length > 0; 
     }) 
     .error(function(err) { 

     }); 
} 
Смежные вопросы