【问题标题】:Get formatted string through function return by getJSON通过getJSON函数返回获取格式化字符串
【发布时间】:2013-05-26 21:01:07
【问题描述】:

我正在尝试制作一个函数,这是通过 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 来构建选择元素。 但就我而言,选项显示在搜索和编辑表单中,但不在列表中。 所以我尝试这种方式让它工作。如果我使用下面的那个功能是有效的。

function getJSON2Str(opt){
    return '0:--;2:high school;5:university;8:elementary school;9:research institute';
}

【问题讨论】:

  • 我建议您在searchoptions 中使用dataUrl 和buildSelect。我认为没有理由使用定义为函数的 同步 value。在buildSelect 内部,您可以做所有您需要的事情。 'opt='+opt 作为参数的用法不好。您应该改用{opt: opt}。您可以将?opt=getEduOption 直接附加到URL (dataUrl: "t4action.php?opt=getEduOption") 或使用searchoptions 的postData 选项,如果需要,可以作为一个函数。

标签: javascript function jqgrid getjson


【解决方案1】:

$.getJSON 是异步的,所以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);
});

在你的情况下,像这样使用它:

getJSON2Str('getEduOption', function(returnStr){
     var searchParam = {search:true, stype:'select', searchrules:{required:true}, searchoptions:{value:returnStr, sopt:['eq']};
     //your search function
});

【讨论】:

  • 非常感谢。但我想在 jqGrid 搜索属性中使用它,例如:`search:true, stype:'select', searchrules:{required:true}, searchoptions:{value:getJSON2Str('getEduOption'), sopt:['eq'] },` 可以吗?
  • 我知道我可以使用dataUrl 属性和buildSelect 来构建选择元素。但就我而言,选项显示在搜索和编辑表单中,但不在列表中。所以我尝试这种方式让它工作。如果我使用下面的那个功能是有效的。 function getJSON2Str(opt){ return '0:--;2:high school;5:university;8:elementary school;9:research institute';}
  • 对不起,它还不能工作。我尝试了任何可能的方法来解决我的问题。也许我稍后会制作一个示例页面。无论如何,再次非常感谢你。
  • @EthanChen:getJSON2Str 有效吗?这是这篇文章的主要问题。如果您有其他问题但与此 getJSON 问题无关,您应该创建另一个有关它的详细问题。不应该在一个问题中问太多无关的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-29
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-26
相关资源
最近更新 更多