我有一个if-else块,它在向服务器发出http.get()之前解析用户输入。但是,if-else继续被跳过。我尝试重新安排我的代码以强制它在调用get()之前完成if-else,但似乎没有任何工作。我也使用AngularJS。
//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 :(得分: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) {
});
}