javascript
  • function
  • jqgrid
  • getjson
  • 2013-05-26 58 views 0 likes 
    0

    我試圖做一個函數,這是由PHP獲取格式化的字符串形式的JSON數據。 但我無法通過此功能獲取格式化的字符串。getJSON獲取格式化的字符串通過函數返回

    下面

    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代碼非常簡單,只需從像database.Example返回一些數據:

    <?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'; 
    } 
    
    +0

    我建議你使用'dataUrl'與'searchoptions'內的'buildSelect'。我沒有理由使用* synchronous *'value'作爲函數。在'buildSelect'裏面,你可以做所有你需要的東西。使用'opt ='+ opt'作爲參數並不好。您應該使用「{opt:opt}」。您可以將'?opt = getEduOption'直接附加到URL('dataUrl:「t4action.php?opt = getEduOption」')或使用'searchoptions'的'postData'選項,如果需要可以作爲函數。 – Oleg

    回答

    0

    $.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 
    }); 
    
    +0

    非常感謝。但我想在jqGrid搜索屬性中使用它,如下所示:'search:true,stype:'select',searchrules:{required:true},searchoptions:{value:getJSON2Str('getEduOption'),sopt:['eq'] },可能有用嗎? –

    +0

    我知道我可以在'buildSelect'中使用'dataUrl'屬性來構建select元素。但在我的情況下,選項以搜索和編輯形式顯示,但不在列表中顯示。所以我嘗試這種方式讓它工作。如果我使用下面的功能是行得通的。 'function getJSON2Str(opt){return'0: - ; 2:high school; 5:university; 8:elementary school; 9:research institute';}' –

    +0

    @MiauwMiauwCat:查看我的更新回答 –

    相關問題