我正在尝试创建一个函数,这是通过PHP获取格式化的字符串形式的JSON数据。 但我无法通过此函数获取格式化的字符串。
以下JavaScript代码:
function getJSON2Str(opt){
var url='t4action.php',returnStr='',i=1;
var textInfo ="";
$.getJSON( url , 'opt='+opt, function (data){
$.each(data,function(){
returnStr+= this.opid + ':' + this.opcont;
if( i < data.length ) returnStr += ';';
i++;
})
//alert(returnStr); //<--here is works to show string 'returnStr'.
});
//alert(returnStr); //<-- here is NOT works to show string 'returnStr'.
return returnStr; //<-- finally I want to return 'returnStr' for other use.
}
alert(getJSON2Str('getEduOption')); //<-- here just show a empty string.
t4action.php代码非常简单,只需从数据库中返回一些数据。例如:
<?php
$returnArr[0]['opid']=2;
$returnArr[0]['opcont']='high school';
$returnArr[1]['opid']=5;
$returnArr[1]['opcont']='university';
$returnArr[2]['opid']=8;
$returnArr[2]['opcont']='elementary school';
$returnArr[3]['opid']=9;
$returnArr[3]['opcont']='research institute';
echo json_encode($returnArr);
?>
我应该怎么做让这个功能起作用?谢谢!
我在jqGrid搜索属性中使用它,如:
.....
search:true, stype:'select', searchrules:{required:true}, searchoptions:{value:getJSON2Str('getEduOption'), sopt:['eq']},
....
我知道我可以将 dataUrl 属性与 buildSelect 一起使用来构建select元素。 但在我的情况下,选项显示在搜索和编辑表单中,但不在列表中。 所以我尝试这种方式让它工作。如果我使用下面的功能是有效的。
function getJSON2Str(opt){
return '0:--;2:high school;5:university;8:elementary school;9:research institute';
}
答案 0 :(得分:0)
$.getJSON
是异步的,因此{I}会在之后立即执行,返回空字符串。
您需要将代码更改为:
return returnStr;
使用它:
function getJSON2Str(opt,callback){
var url='t4action.php',returnStr='',i=1;
var textInfo ="";
$.getJSON( url , 'opt='+opt, function (data){
$.each(data,function(){
returnStr+= this.opid + ':' + this.opcont;
if( i < data.length ) returnStr += ';';
i++;
})
if (typeof callback === "function"){
callback(returnStr);
}
});
}
在您的情况下,请像这样使用:
getJSON2Str('getEduOption', function(returnStr){
alert(returnStr);
});