2017-01-21 13 views
1

私は数日間これを叩いていますので、助けを求める時間です。私はドロップダウンでユーザーの選択に基づいてテーブルのサブセットのみを表示するAjax/PHP/MySQLを使用しようとしています。 PHPコードは、MySQLストアドプロシージャを呼び出します。私が構築しているコールは正しいです。もしそれをエコーし​​てコピーし、それをphpMyAdmin MySQLコンソールから実行すると、私は期待した結果を得ています。ページ自体の関連する部分があるAjaxからPHPへの呼び出し/ PHPはnull-ishの値を返します

{"current_field":null,"field_count":null,"lengths":null,"num_rows":null,"type":null} 

<script> 
    function updateActions() { 
    var results = ''; 
    var success = false; 
    var selectedIssues = getIssues(); 
    var fnargs = "GetActions|'" + selectedIssues + "'"; 

    $.ajax({ 
     url: 'retrievedata.php', 
     type: "POST", 
     async:false, 
     data: {"functionname":"getactions", "arguments":fnargs}, 
     dataType: "JSON", 
     complete: function (obj, textStatus) { 
         if((obj.error != '')) { 
         alert(JSON.parse(obj)); 
         $("#testresult").text(textStatus); 
         } 
         else { 
         $("#testresult").text("Error"); 
//      console.log(obj.error); 
         } 
         success = true; 
       }, 
     error: function(textStatus, errorThrown) { 
      success = false; 
      $("#testresult").text('Error occurred: '.textStatus); 
     }    
     }) 

    }; 
    </script> 

二しかし、アヤックスで呼ばれていますPHPコードから、私の代わりにこの結果を(私はそれをJSON_encode後、Firebugの中でエコー)を参照してくださいノート。まず、呼び出すgetIssuesスクリプトは期待値を返します。第二に、私が実際に得た結果を処理するための正しいコードを実際に書いたわけではありません。それでも正しい結果をページに戻そうとしています。私は別のPHPを持って

<?php 

function connect2db() { 
    $hostname = "XXX"; 
    $username = "XXX"; 
    $password = "XXX"; 
    $database = "XXX"; 
    $conn = mysqli_connect($hostname, $username, $password, $database); 

    if($conn == false) { 
     echo "Connection could not be established.<br />"; 
     die(print_r(myslqi_connect_error(), true)); 
    } 

    return $conn; 
} 

function getactions($spname, $params, $errorstring = 'Unable to retrieve requested data') { 
    $conn = connect2db(); 
    $query = "CALL ".$spname."(".$params.")"; 
    echo $query."\r\n"; 
    $result = mysqli_query($conn, $query); 

    if ($result == false) { 
     $errmessage = mysqli_error($conn); 
     $allresult = $errmessage; 
     echo $errmessage; 
     die(print_r(mysql_error(), true)); 
    } 
    else { 
     echo "In else case\r\n";  
     $allresult = json_encode($result);    
    }   

    echo $allresult; 
    return $allresult; 
} 

?> 

:(もちろん、取り出したデータや資格情報を特定すると)dbfns.phpの関連する部分がある

<?php 

    include "dbfns.php"; 

    $aResult = array(); 
    $returnval = 'before tests'; 

    if(!isset($_POST['functionname'])) { 
     $aResult['error'] = 'No function name!'; 
     } 

    if(!isset($_POST['arguments'])) { 
     $aResult['error'] = 'No function arguments!'; 
     } 

    if(!isset($aResult['error'])) { 

     $functionName = $_POST['functionname']; 
     $argsarray = explode('|', $_POST['arguments']); 
     $argcount = count($argsarray); 
     $returnval = 'before switch'; 

     switch($_POST['functionname']) { 
      case 'getactions': 
       if($argcount < 2) { 
        $returnval = 'too few arguments'; 
       } 
       else { 
        $returnval = 'in else'; 
        $returnval = getactions($argsarray[0], $argsarray[1]); 
       } 
       break; 

      default: 
       $returnval = 'function not found'; 
       break; 
     } 

    } 

    return $returnval; 
    ?> 

ページretrievedata.phpは次のようになります同じMySQL SPを呼び出すAjaxからではなく、期待される結果を返すretrieveataの関数であるため、私はSPが私の期待することをかなり確信しています。

私はこのすべてをAjaxからどうやってやるのか分からないと思います。

編集:私はajax呼び出しで完了するのではなく、_POSTではなく_GETを成功させることを追加したいと思います。結果に変化はありません。

+0

他にもconnect2dbを使用していますか?(ユーザーがspに対して実行権を持っていないのだろうか?) –

+0

はい、他の機能はgetactionsの変形です。呼び出しコードは同一です。 –

答えて

1

mysqli_query()の結果オブジェクトをシリアライズしているようです。私は内部的に何がわかりませんが、結果を列挙したり取得したりするまで、結果の実際のデータは返されません。

this exampleを参照すると、JSON結果に変換されます。

+1

_ SELECT、SHOW、DESCRIBE、またはEXPLAINのクエリが成功すると、mysqli_query()はmysqli_resultオブジェクトを返します。_結果を取得する必要があります。 '$ allresult = json_encode(mysqli_fetch_assoc($ query)); ' – DanFromGermany

+0

json_encodeを呼び出す前にmysqli_fetch_assocでパラメータをラップするとそのトリックが行われました。 (最初の間違った返答をお詫びします;パラメータを上げました) –

関連する問題