1

したがって、これは昨日の問題が原因で、エラーが異常だったため、すぐに制御不能になりました。この問題はまだ存在しますが、質問はここで保留になり、現在の問題に関連する新しい質問を修正するように求められました。それでは、行きましょう。

問題は本質的に基本的なものです。PHPあなたが昨日助けてくれたなら、変数をファイルに配信するために $.post から $.ajax 投稿に切り替えました。ただし、私のPHPファイルは、インデックスが「未定義」であることを示すこの変数を受け取ることはないようです。

これは通常、変数が値を保持していないか、名前が間違っているか、間違って送信されたことを意味します。これをいじって丸一日過ごした後も(私を殺して)、PHPファイルがこのデータを受信して​​はならない理由はまだわかりません。私はこれにかなり慣れていないので、誰かが明らかなエラーを見つけたり、別の可能な解決策を推奨したりできることを本当に望んでいます.

これがコードです

jQuery

$('#projects').click(function (e) {
alert(aid); 
$.ajax({    
    url:'core/functions/projects.php',
    type: 'post',
    data: {'aid' : aid},
    done: function(data) {
    // this is for testing
    }
    }).fail (function() {
        alert('error');
    }).always(function(data) {
        alert(data);                                        
        $('#home_div').hide();          
        $('#pcd').fadeIn(1000);
        $('#project_table').html(data); 
    });         
});

PHP

<?php

include "$_SERVER[DOCUMENT_ROOT]/TrakFlex/core/init.php";

if(isset($_POST['aid'])) {  
    $aid = $_POST['aid'];               
    try {
        $query_projectInfo = $db->prepare("
            SELECT  projects.account_id,
                    projects.project_name,                  
                    projects.pm,    
                    //..irrelevant code      
            FROM projects
            WHERE account_id = ?                        
        "); 

        $query_projectInfo->bindValue(1, $aid, PDO::PARAM_STR);
        $query_projectInfo->execute();
        $count = $query_projectInfo->rowCount();

        if ($count > 0) {
            echo "<table class='contentTable'>";
            echo "<th class='content_th'>" . "Job #" . "</th>";
            echo "<th class='content_th'>" . "Project Name" . "</th>";
            //..irrelevant code          
            while ($row = $query_projectInfo->fetch(PDO::FETCH_ASSOC)) {                
                echo "<tr>";
                echo "<td class='content_td'>" . "<a href='#'>" . $row['account_id'] . "</a>" . "</td>";
                echo "<td class='content_td'>" . $row['project_name'] . "</td>"; 
                //..irrelevant code
                echo "</tr>";
            }
            echo "</table>";            
        }       
    } catch(PDOException $e) {
        die($e->getMessage());
    }   
} else {
    echo 'could not load projects table';
}

?>   

「#projects」を押してこのコードを実行すると、2 つのアラートが表示されます。この最初のアラートは、変数「援助」の値である「6」を示しており、予想されます。2 番目のアラートは空白です。

ここで私は混乱します。値 6 で投稿が送信されている場合。 $_POST['aid'] が設定されていませんか? また、それが当てはまる場合、私のコードは、私の?ではなくif、条件文の一部を実行するべきではありません。いずれにせよ、これは奇妙に思えます。私のファイルから何かを受け取るべきではありませんか?elsePHP

Firebug では、私たちは信頼していますよね? Firebug を開いてこのように処理
Firebug -> POST projects.php -> XHR -> POST(tab) ->
すると、「パラメータ」ウィンドウに 6 が表示され、「ソース」ウィンドウに「6」が表示されます。次に、「応答」タブと「HTML」タブをクリックすると、どちらも値がありません。

とにかく、そのテキストの壁は私の問題です。繰り返しますが、誰かがここで私を助けてくれることを本当に望んでいます。単純な解決策であるべきものにこれ以上時間を無駄にしたくありません。

編集

PHPファイルを次のように変更すると

<?php

if(isset($_POST['aid'])) {  
    $aid = $_POST['aid'];
    echo $aid;
} else {
    echo 'fail';    
}

応答は '6' になりました。万歳!私たちは突破口を開きました!クエリの結果のテーブルがロードされないのはなぜですか?

補足 これは、

if(isset($_POST['aid'])){
//all my code
} else {
    //response
}

このように変数 $aid をハードコードするだけです

$aid = '6';

次に、PHPファイルを直接実行すると、クエリが成功し、動的に作成されたテーブルがページに読み込まれます。

また、私に使用を求める回答の1つに応じて

$('#projects').click(function (e) {
    alert(aid); 
    $.ajax({    
        url:'core/functions/projects.php',
        type: 'post',
        data: aid,
        success: function(data) {
        // this is for testing
        }
        }).error (function() {
            alert('error');
        }).complete (function(data) {
            alert(data);                                        
            $('#home_div').hide();              
            $('#pcd').fadeIn(1000);
            $('#project_table').html(data); 
        });     
});

私はそれを使用していましたが、jQuery v1.10.2 を使用しています。これによれば、これらのメソッドは非推奨であるか、非推奨です。いずれにせよ、結果に違いはありませんでした。

とにかく問題は今です。単純なバージョンを使用した場合、'6' の $aid 変数が返されるのはなぜですか。ただし、それを使用してクエリを実行しようとすると、何も得られません。また、6 をハードコードするとテーブルが作成されることを覚えておいてください。

4

6 に答える 6

2

これはエラーである可能性があると思います:

data: aid,

そのはず

data: {'aid':aid},

これにより、php ページで探している $_POST['aid'] ラベルと値が提供されます。

編集:

これに問題がある場合は、テスト用に単純化します。私の経験では、このようなことがうまくいかない主な理由は次のとおりです。

ファイルに到達していません

ファイルに到達していますが、ファイルは受信しているものとは異なるものを期待しており、制御構造のために何も返していません

正しいデータでファイルに到達していますが、php ファイルに他のエラーがあり、それを返すことができません。

あなたのケースでは、これらのそれぞれを簡単に除外できます。

于 2013-07-28T18:39:28.967 に答える
1

ajax メソッドへの jQuery データ パラメータは、 などのオブジェクトである必要があります{'aid': aid}。それはあなたの問題だと思います。また、always メソッドにデータのパラメーターがないことにも気付きました。

于 2013-07-28T18:39:52.150 に答える
1

通常、done は次のように使用します。

$.ajax({
    //...
})
.done(function(data){
    //...
});

次のようにしてください:

var fetch = true;
var url = 'someurl.php';
$.ajax(
{
    // Post the variable fetch to url.
    type : 'post',
    url : url,
    dataType : 'json', // expected returned data format.
    data : 
    {
        'aid' : aid
    },
    success : function(data)
    {
        // This happens AFTER the backend has returned an JSON array (or other object type)
        var res1, res2;

        for(var i = 0; i < data.length; i++)
        {
            // Parse through the JSON array which was returned.
            // A proper error handling should be added here (check if
            // everything went successful or not)

            res1 = data[i].res1;
            res2 = data[i].res2;
            // Do something with the returned data
        }
    },
    complete : function(data)
    {
        // do something, not critical.
    }
});

必要に応じて、障害部分を追加できます。とにかく、これは動作することが保証されています。私はそれについてもっとコメントするのに十分なほど十分に慣れていません。

于 2013-07-28T18:54:06.580 に答える
1

試す

include "{$_SERVER['DOCUMENT_ROOT']}/TrakFlex/core/init.php";

代わりに、$_SERVER[DOCUMENT_ROOT] なしのブラケットは機能しません。文字列で配列を使用している場合は、これらの括弧が必要です。

于 2013-07-28T18:54:08.167 に答える
1

データを正しく投稿している場合、問題は PHP ページにあるのでしょうか? init.php インクルードは $_POST['aid'] の値を変更できませんでしたか?

于 2013-07-28T18:51:34.560 に答える