0

したがって、これは昨日の問題が原因で、エラーが異常だったため、すぐに制御不能になりました。この問題はまだ存在しますが、質問はここで保留になり、現在の問題に関連する新しい質問を修正するように求められました. それから私はここで質問をしましたが、すぐに話題が逸れてしまいました。元の問題を解決した答えを受け入れて先に進むことにしました。私は今、問題を非常に具体的な質問に絞り込んだと信じています.

この問題は今では意味がありません。次のコードがあります

jQuery

$('#projects').click(function (e) {
$.trim(aid);
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]/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 番目のアラートは空白です。

ここで私は非常に混乱します。PHPファイルを次のように変更して、物事を単純化し、問題の根本に到達した場合

<?php

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

応答は '6' になりました。これは、ファイルが $_POST['aid'] 変数を受け取り、内部で正しく設定していることを意味しますPHP。コードを元に戻すと、何も受信しません。

ただし、元のPHPファイルをこれに変更すると

<?php

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

    $aid = '6';             
    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());
    }    
?> 

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

というわけでレビュー。援助変数は 6 に設定されており、疑いの余地はありません。ファイルを単純化するPHPと、$_POST['aid'] 変数を受け取り、データを取得し、PHP$aid 変数を設定して、それをエコー バックします。ただし、クエリに挿入してテーブルを膨らませようとすると、何も得られません。$_POST['aid'] 変数に依存しないPHPようにファイルを変更すると、機能します。ここで何が起こっているのでしょうか?ファイルは投稿なしで機能し、投稿はテーブル インフレーション クエリなしで機能します。PHP

私は完全に迷っているので、誰かがこれを理解するのを手伝ってくれることを本当に願っています

編集

テストのためにphpファイルを変更しました。今はまさにこのように見えます。壁すいません

<?php

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

    if(isset($_POST['aid'])) {  
        $aid = $_POST['aid'];
            echo $aid;      
        try {
            $query_projectInfo = $db->prepare("
                SELECT  projects.account_id,
                        projects.project_name,                  
                        projects.pm,    
                        projects.apm,
                        projects.est_start,
                        projects.est_end,
                        projects.contact,                   
                        projects.trips,
                        projects.tasks,
                        projects.perc_complete,
                        projects.bcwp,
                        projects.actuals,
                        projects.cpi,
                        projects.bcws,
                        projects.bac,
                        projects.comments,
                        projects.status,
                        projects.project_revenue,
                        projects.profit_margin,
                        projects.pm_perc,
                        projects.audited         
                FROM projects
                WHERE account_id = ?                        
            "); 

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

                echo "<table class='contentTable'>";
                echo "<th class='content_th'>" . "Job #" . "</th>";
                echo "<th class='content_th'>" . "Project Name" . "</th>";
                echo "<th class='content_th'>" . "PM" . "</th>";
                echo "<th class='content_th'>" . "APM" . "</th>"; 
                echo "<th class='content_th'>" . "Est. Start" . "</th>";
                echo "<th class='content_th'>" . "Est. End" . "</th>";
                echo "<th class='content_th'>" . "Contact" . "</th>";
                echo "<th class='content_th'>" . "Trips" . "</th>";
                echo "<th class='content_th'>" . "Tasks" . "</th>";
                echo "<th class='content_th'>" . "% Complete" . "</th>";
                echo "<th class='content_th'>" . "BCWP" . "</th>";
                echo "<th class='content_th'>" . "Actuals" . "</th>";
                echo "<th class='content_th'>" . "CPI" . "</th>";
                echo "<th class='content_th'>" . "BCWS" . "</th>";
                echo "<th class='content_th'>" . "BAC" . "</th>";
                echo "<th class='content_th'>" . "Comments" . "</th>";
                echo "<th class='content_th'>" . "Status" . "</th>";
                echo "<th class='content_th'>" . "Project Revenue" . "</th>";
                echo "<th class='content_th'>" . "Profit Margin" . "</th>";
                echo "<th class='content_th'>" . "PM%" . "</th>";
                echo "<th class='content_th'>" . "Audited" . "</th>";

                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>";
                    echo "<td class='content_td'>" . $row['pm'] . "</td>";
                    echo "<td class='content_td'>" . $row['apm'] . "</td>";
                    echo "<td class='content_td'>" . $row['est_start'] . "</td>";
                    echo "<td class='content_td'>" . $row['est_end'] . "</td>";
                    echo "<td class='content_td'>" . $row['contact'] . "</td>";
                    echo "<td class='content_td'>" . $row['trips'] . "</td>";
                    echo "<td class='content_td'>" . $row['tasks'] . "</td>";
                    echo "<td class='content_td'>" . $row['perc_complete'] . "</td>";
                    echo "<td class='content_td'>" . $row['bcwp'] . "</td>";
                    echo "<td class='content_td'>" . $row['actuals'] . "</td>";
                    echo "<td class='content_td'>" . $row['cpi'] . "</td>";
                    echo "<td class='content_td'>" . $row['bcws'] . "</td>";
                    echo "<td class='content_td'>" . $row['bac'] . "</td>";
                    echo "<td class='content_td'>" . $row['comments'] . "</td>";
                    echo "<td class='content_td'>" . $row['status'] . "</td>";
                    echo "<td class='content_td'>" . $row['project_revenue'] . "</td>";
                    echo "<td class='content_td'>" . $row['profit_margin'] . "</td>";
                    echo "<td class='content_td'>" . $row['pm_perc'] . "</td>";
                    echo "<td class='content_td'>" . $row['audited'] . "</td>";
                    echo "</tr>";

                }
                echo "</table>";                
        } catch(PDOException $e) {
            die($e->getMessage());
        }   
    } else {    
        echo 'could not load projects table';
    }

    ?>

ブラウザに表示される応答は次のとおりです

6<table class='contentTable'><th class='content_th'>Job #</th><th class='content_th'>Project Name</th><th class='content_th'>PM</th><th class='content_th'>APM</th><th class='content_th'>Est. Start</th><th class='content_th'>Est. End</th><th class='content_th'>Contact</th><th class='content_th'>Trips</th><th class='content_th'>Tasks</th><th class='content_th'>% Complete</th><th class='content_th'>BCWP</th><th class='content_th'>Actuals</th><th class='content_th'>CPI</th><th class='content_th'>BCWS</th><th class='content_th'>BAC</th><th class='content_th'>Comments</th><th class='content_th'>Status</th><th class='content_th'>Project Revenue</th><th class='content_th'>Profit Margin</th><th class='content_th'>PM%</th><th class='content_th'>Audited</th></table>

これは、2 つのことを意味します。aid 変数が渡され、設定されています。ただし、クエリで実行すると失敗します。しかし、$aid = '6'; と入力すると、次に、それが機能する値として援助をバインドします。

なぜ?

2回目の編集

jsそのため、他の人の助けを借りて、これはエラーではなくエラーであることがわかりましたphp. 変数は で 6 に設定されてjsいますが、いくつかの隠し文字があり、それらを見つけたと思います。firebug を見ると、これがソースとして表示されます

aid=%0D%0A6

どちらが改行になるはずですか?それがエラーの原因だと思います。

こんな感じで助成を受けています

var title;
var aid;
$(".sa").click(function (e) {
    title = $(this).text();
    $.post('core/functions/getAccountId.php', { 
        title: title              
    })
    .done(function(data) {
        aid = data;     
        $("#acc_title").html(title);    
        $('#accountsSelectDiv').hide();
        $('#acc_home').fadeIn(1000);
        $('#home_div').show();      
    })
    .fail(function(jqXHR, status, error) {
        alert(error);
    });     
});

これは私の入手方法によるものかもしれませんが、私にはわかりません。ただし、ソース内の余分な文字を削除するにはどうすればよいですか? そこが問題だと思う

4

2 に答える 2

1

* 編集 *

これは受け入れられた答えですが、実際の解決策とは何の関係もないという意味では、かなり間違っています。それは、ここと質問の両方のコメントから出てきました。最終的には、別のPHPファイルから読み取ったJSファイルから来た文字列のCR / NL( "\ r\n")の組み合わせでした... わかります。「おかしなことが起きたら、隠れキャラをチェック!」


今は時間がなく、日曜日の午後 10 時から仕事をしています。しかし..

私が理解すれば、これはあなたの問題です:

データを定義するとき: {'aid' : aid} 援助はまだ定義されていません!

その上にあるという事実に惑わされないでください$('#projects').click(function (e) { alert(aid);。クリックすると呼び出されるため、おそらく援助が定義されたときに実行されます。{'aid' : aid} は、コードが解析された時点での援助の値を取るため、援助がその上で定義されていない場合、未定義になります。

前にaid="hello";クリック スクリプトを使用すると、それが機能するか、少なくとも「hello」が表示されます。

JQuery と Ajax、およびコールバックには注意が必要です。すべてがいつ実行されるかを正確に考えてください。「上に書かれている=最初に実行される」に頼らないでください。

これがあなたの問題であり、解決できることを願っています、g'nite.. :)

もう1つ.. 1つの解決策は、クリックハンドラー内でAjaxのものを準備することです。

$("..").click() { // ここで何かを準備します // {'aid' : aid} ここで援助を定義します }

于 2013-07-28T20:08:23.747 に答える