通过getJSON函数返回获取格式化字符串

时间:2013-05-26 11:12:45

标签: javascript function jqgrid getjson

我正在尝试创建一个函数,这是通过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';
}

1 个答案:

答案 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);
});