0

私は ajax にかなり慣れていません。これは、「bridge.php」という php ドキュメントを使用して、SQL データベースから情報を取得するために使用している ajax 呼び出しです。私がこれから何を得ているのか、まったく理解できないようです。配列ですか?オブジェクト?ポストを使用する必要があるときに get を使用しているため、何も返されませんか? 私が取得しようとしている情報の量は get には収まりませんが、呼び出しで送信している量は十分に小さいです。

<script type="text/javascript">
    function refreshPro(namex){
        alert(namex);
        if (window.XMLHttpRequest)
        {// code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp=new XMLHttpRequest();
        }
        else
        {// code for IE6, IE5
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange=function()
        {
            if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {
                document.getElementById("port_work").innerHTML=xmlhttp.responseText;   //what is xmlhttp.responseText?
            }
        }
        xmlhttp.open("GET","../bridge.php?pro="+namex,true);
        xmlhttp.send();
    }
</script>

そして今、URLからget varを取得してデータベースにクエリを実行するphp(bridge.php)の場合、この部分はそれ自体で問題なく動作することがわかっています...

<?php
$pro = $_GET["pro"];
$sql = "SELECT * FROM portfolio WHERE title LIKE \"%$pro%\"";

$result = mysql_query($sql);

while ($row = mysql_fetch_array($result)) {

?>

    <div id="portfolio_item">
        <h2><?php echo $row['title']; ?></h2>
        <img src="<?php echo $row['image_paths']; ?>" alt="<?php echo $row['title']; ?>" />
        <p id="portfolio_desc"><?php echo $row['description']; ?></p>
    </div>

<?php
}
?>

はい、私は宿題をしました。私はこれらの他の2つの投稿を調査しましたが、1つは私が何も知らないJSONについて話し始め、もう1つは私の問題と完全に一致していないようでしたが、それでも答えはちょっと役に立ちました. 別のファイルからAJAX responseTextを返し、Ajax呼び出しがphpファイルからデータを返さない

4

4 に答える 4

2

サーバーからプレーンな HTML が返されます。responseText 変数は、GET 要求に対する平文の応答を含む文字列です。

GET リクエストは、特定の URL にアクセスするときに通常実行する他のブラウザ リクエストと似ています。http://url/to/bridge.php?pro=<someValue>したがって、選択したブラウザを使用してアクセスすることにより、bridge.php スクリプトが特定の入力に対して何を送信するかをテストできます。

返されるデータの量は関係ありません。POST または GET を使用した WRTで重要なのは、入力するデータの量です(GET リクエストは 255 文字のデータしか取得できず、POST は技術的に無制限です)。

bridge.php スクリプトに直接アクセスしても何も得られない場合、これは、このスクリプトが失敗して 500 内部サーバー エラー コードが発生した可能性があることを示しています。応答で何かを行う前に、コードが 200 (成功) であることを明示的にチェックしているため、これは JavaScript コードによってキャッチされません。

私は追加します:

    ... snip ...
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            document.getElementById("port_work").innerHTML=xmlhttp.responseText;   
        }
        else 
        {
           alert('There was a ' + xmlhttp.status + ' error :(');
        }
    }
    ... snip ...
于 2012-05-09T05:39:23.547 に答える
0

まず、bridge.phpから0または1、あるいは任意のキーワード「Helloworld」をエコーし​​ます。

コード

if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
 alert(xmlhttp.responseText);
 }

すべてがうまくいけばと言います。IEの場合、bridge.phpへのパスは、このif条件の内部に入ります。応答を警告します。

これが完全に機能する場合は、コードも機能します。

@ccKepが言及した回答も参照してください。使いやすいです。

さらに、Mozillafirebugのようなツールを使用してください。何が起こっているのかを理解できるように。お役に立てれば。

于 2012-05-09T05:45:34.540 に答える
0

これにjQueryを使用すると、かなり簡単になります。

<script type="text/javascript" src="path/to/jquery.js">
<script type="text/javascript">
function refreshPro(namex)
{
    $.ajax({
      type: "GET",
      url: "../bridge.php",
      data: {
        pro: namex
      }
    }).done(function( msg )
    {
      $("#port_work").html(msg);
    });
}
</script>
于 2012-05-09T05:38:04.517 に答える
-1

Ajax はサーバーではなくクライアントで実行されるため、サーバーの URL を指定する必要があります。これはうまくいきません:

xmlhttp.open("GET","../bridge.php?pro="+namex,true);

うまくいく可能性があるのは次のとおりです。

xmlhttp.open("GET","http://yourhost.com/bridge.php?pro="+namex,true);
于 2012-05-09T05:34:50.783 に答える