1

私はプログラミング スタッフが初めてで、現在、php と mysql を使用して IOS アプリ用の Titanium モバイルを試しています。

問題は、DB から配列データを取得して Titanium に渡そうとすると、「this.responseText」に「null」が含まれていることです。

ここにその部分があります、

    loadReq.onload = function()  
    {  
        var json = this.responseText;
        var response = [];
        response = JSON.parse(json);
        Ti.API.info(response);
    };  

    loadReq.onerror = function(event)
    {
        alert("Network error");
        Ti.API.debug(event);
        Ti.API.info(event);
    };

    loadReq.open("POST","http://localhost/myAppName/post_loading.php");
        var params = {
            userid: win.userid
        };
        loadReq.send(params);

ここに私のphpコードがあります。

    <?php
    $con = mysql_connect('localhost','root','root');
    if (!$con)
    {
        echo "Failed to connect.";
        exit;
    }
    $db = mysql_select_db('myAppName');
    if (!$db)
    {
        echo "Failed at selecting db.";
        exit;
    }

    $userid = $_POST['userid'];

    $sql = "here is sql order which will fetch array data based on $userid";
    $query = mysql_query($sql);
    $response = array();

    if (mysql_num_rows($query) > 0)
    {
        $row = mysql_fetch_array($query);
        $response = $row;
        echo json_encode($response);
    }
    else
    {
        echo "there is no such data"; 
    }
    ?>

phpファイルがDBから取得する配列データはこんな感じで、

    Array(
        [0] => Array(
                'id' => '1',
                'name' => 'name1',
                'sex' => 'm',
                'age' => '20'
               ),
        [1] => Array(
                'id' => '3',
                'name' => 'name3',
                'sex' => 'f',
                'age' => '25'
               ),
        [2] => Array(
                'id' => '5',
                'name' => 'name5',
                'sex' => 'm',
                'age' => '18'
               )
    )

いくつかのケースをテストして、HTTPClient が機能していること、SQL の順序が構文で正しいこと、単一のデータ (多次元ではなく配列、値、および単語のみ) を適切に渡すことができることを確認しました。

ただし、現時点では多次元配列は利用できません。Ti.API.info は、応答が「null」であることを教えてくれます

なにか提案を?

前もって感謝します。

4

2 に答える 2

0

jsonをエコーする前に、必ずコンテンツタイプを設定してください。エコーの前に追加します。

header('Content-type: application/json');

これにより、httpリクエストにヘッダーが設定されるため、チタンのjavascriptエンジンは、応答データを適切に処理する方法を認識します。

于 2012-05-13T06:25:36.777 に答える
0

やっと手に入れました。エコーを1つだけではなく、phpにforeach関数を追加するだけです。

答えは次のとおりです。

    foreach($responses as $response)
    {
            echo $response;
    }

このような単純な間違い...十分に時間がかかりました:(この質問が他の多くの時間を節約できることを願っています.

于 2012-05-14T04:23:08.170 に答える