2012-05-09 13 views
0

私はかなり新しいajaxの新作です。これは、 "bridge.php"というPHPドキュメントを使用してSQLデータベースから情報を取得するために使用しているajax呼び出しです。私は何かがあれば、これから何を取り戻しているのか分かりません。それは配列ですか?オブジェクト?私はポストを使用すべきときに私は取得を使用しているので、私は戻って何も得ていないのですか?私が取り戻そうとしている情報の量は、getには収まらないでしょうが、私が呼び出して送信する量は、十分に小さくなります。私に戻ってくるアヤックスとは何ですか? (ajaxのPHPファイルへの呼び出し)

<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から取得する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つの他の投稿を研究しましたが、私は何も知らないJSONについて話を始め、もう1つは私の問題にマッチするようには見えませんでした。 Returning AJAX responseText from a seperate fileおよびAjax call not returning data from php file

+0

申し訳ありませんが、修正のための更新内容 –

+0

.responseTextは別のものにする必要がありますか? –

+0

サーバからHTMLを取得しています – Broncha

答えて

2

サーバ。 responseText変数は、GET要求に対する平文応答を含む文字列です。

GETリクエストは、特定のURLを訪問するときに通常実行する他のブラウザリクエストと同じです。したがって、bridge.phpスクリプトが与えられた入力に対して何を送信するかは、選択したブラウザを使用してhttp://url/to/bridge.php?pro=<someValue>にアクセスしてテストすることができます。それはあなたが戻ってを取得するデータの量を重要ではありません

、どのようなPOSTまたはGETを使用してWRTをmatternsすると、でを入れたいどれだけのデータである(、要求がデータの255文字のみを取ることができますGET 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 ... 
+0

ありがとうございます。スクリプトは私がそれを直接訪問するときに機能します。今私は私が扱っていることを知っているので、私はそれを理解することができると思う。だから私は ".responseText"を単にhtmlで動かすために変更することができますか? –

+0

あなたの問題を解決しなかった場合、なぜこの回答を受け入れましたか? id = "port_work"のinnerHTMLに値を代入しているので、responseTextには何も問題はありません。本質的にDOMの要素全体を置き換え、div全体を返すと考えると、これはうまくいくはずです。 Firebugはあなたの友人です。私は、アヤックスのコードは決して走っていないが、火かき棒はあなたにこれを示すだろうと推測している。実際のサンプルURLを提供したい場合、人々がこれを確認することができます。 – gview

+0

"私はちょうどhtmlで作業するために"あなたが何を意味するのか分かりません。 responseTextは単なる文字列です。任意のJS文字列関数を使用することができます。それ以外の場合は、このレスポンスをドキュメントに追加することができます(例の場合と同じように)ので、DOM関数(getElementByIdなど)を使用してレスポンスを操作できます。 –

-1

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

何働くかもしれないことである
xmlhttp.open("GET","../bridge.php?pro="+namex,true); 

xmlhttp.open("GET","http://yourhost.com/bridge.php?pro="+namex,true); 
+0

ありがとうございました。私はそれを試みたが、まだ何も戻っていない。 –

+0

それはGETなので、そのエンドポイントをブラウザに直接入れてみてください。それは何かを返しますか? – sberry

+0

はい、あなたはまた、PHPスクリプトをテストし、実際に何かを返すようにする必要があります。 mysql_connect()またはmysql_select_db呼び出しが明白でないため、これは単なるスニペットであると見なします。また、Firebugとコンソールでテストすることをお勧めします。あなたのAjax呼び出しが起動している(または起動していない)ことがわかり、要求と応答のデータが流れています。 – gview

0

このためにjQueryを使用することはかなり簡単になります:あなたがからプレーンHTMLを取り戻すしている

<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> 
0

ファーストは、ちょうど0または1エコーやbridge.phpから任意のいまいましいキーワード 'こんにちは、世界。

コード

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

はすべてがある場合は罰金になると述べています。 I.E.もしbridge.phpへのパスであれば、if条件の中に入ります。応答を警告します。

これが完全に動作する場合は、コードが正しく動作します。

また、@ccKepによって記載された回答を参照してください。それは使いやすいです。

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

関連する問題