2012-03-30 26 views
-1

私はPHPファイルに文字列を渡すこの小さなJavaScriptコードを持っており、警告ボックスにレンダリングするJSONを待っています。問題は、私がAJAXが働いているとは思わないクロスサイトの問題によるものです。javascriptからphpへのGET呼び出しをajaxなしで行う

これは、私はjavascriptのために持っていたものです。だから、私のJavascriptをPHPへの呼び出しを行い、その後、JSON文字列を取り戻す

<p style="text-align: center;"><script type="text/javascript"> 
var http = new XMLHttpRequest(); 
var params = x; 
http.onreadystatechange=function() 
{ 
    alert(http.responseText); 
    alert(http.responseXML); 

    if (http.readyState==4 && http.status==200) 
    { 

    } 
    } 
    http.open("GET","http://someserver.somesight.edu/scripts/auth.php?name=" + params,true); 
    http.send(); 
</script></p> 

です。私はこの文字列でもっとやりたいと思っていますが、今はもう一度戻っていきたいと思います。そうではないと私はそのドメインの問題(javascriptはあなたが別のドメインからのajax要求を行うことを許可しないものと呼ばれるもの)を考えています。

これは私のPHPスクリプトです:

<?php 
include("config.php"); 
include("JSON.php"); 
$selectedusername = $_GET['name']; 
$resultstring = connectToLDAP($selectedusername); //some function 
$echo $resultstring; //the json string 
?> 

これは単純なまだ十分にはJavaScriptでアラートボックスが空白とヌルを持って十分に確認してくださいようです。私は、何か文字列がエコーされているためにPHPコールを返す非アヤックスの方法があると思ったので、私はまだそれ以上の処理をしたいと思っています...

ここで何か大きな間違いがありますか?私は、スクリプトがクロスサイトへの投稿を許可されていないレベルについては熟知していないことに注意してください。ジャバスクリプトを

my.somesight.edu

とサイトはそれが後藤しようとしているが、私はそれは大丈夫だったメインドメインであることと思っ

someother.somesight.edu

である上にホストされていますが、その明らかではない作業(または私のコードは、単に壊れている)ではない

バイオリン弾きの結果以降:

それはからHTTPSトンネルを行います

[RAW VIEW CLICKING ON THAT WEB SESSION] 
HTTP/1.1 200 OK 
Date: Fri, 30 Mar 2012 21:07:39 GMT 
Server: Apache/2.2.15 (Red Hat) 
X-Powered-By: PHP/5.3.10 
Content-Length: 53 
Connection: close 
Content-Type: text/html; charset=UTF-8 
{"messagetype":"none","message":"time good","url":""} 

だから、JSONは私が後ろに望むものであることを、よさそうだ。その上でPHPスクリプトを持って10安打サイトはwebsession JavaScriptを有効にして...上にあるサイトでは、その後9にwebsession 3であります私のjavascript ..何も起こらない。

+0

でなければなりません。 –

+0

'http.onreadystatechange'を定義する前に' http.send(); 'を実行する - 注文を交換する – hamczu

+0

注文を切り替えると、まだ空のresponseTextとXMLが返されます。スクリプトオプションを変更してJSONPを使用するアクセス権があれば、もっと研究していきます。 – Codejoy

答えて

0

Fiddlerをインストールして、サーバーから送受信したリクエストを確認してください。 あなたがまだそれを理解できない場合は、ここに投稿してください。

+1

ねえ、このフィドラーはクールです。私はそれがexsistedていたのか分からなかった。私はそれを使用する方法を理解しようとしており、サーバーからの要求と応答を見つけて投稿します。 – Codejoy

+0

k投稿を編集する... – Codejoy

0

CORSとJSONPのクロスサイトの問題を回避できます。サーバーへのアクセス権/管理権を持っている場合は、Access-Control-Allow-Originヘッダーを設定し、クロスドメインはクロスドメインではありません。 その他のオプションはJSONPです。これはスクリプトブロックを介してクロスドメインGETリクエストを使用します。あなたのコールバック関数が呼び出されると、jsonの結果は評価されます。

0

あなたのPHPはプレーンな文字列をエコーバックしています。単純な文字列は必要ありません。 JSONでエンコードされたデータが必要です。

PHP Manual json-encode

だからあなたの例では、試してみてください。

また
echo json_encode($resultstring); 

を、お使いのブラウザではJavaScriptが返されるJSONデータをリッスンしていることを確認する必要があります。jQueryのgetJson ajaxメソッドを試してみることをお勧めします。非常に使いやすい。

+0

実際には、ldap関数に接続するとjson文字列が返されます。それを返すだけのストリングはうまくいくはずです。 – Codejoy

+0

ああ、ちょうどOPが非アヤックスの解決策を求められたことを実感しました、申し訳ありません。 – penco

0

あなたのjavascriptのコードはここにすべてのデータを返しません:

if (http.readyState==4 && http.status==200) 
{ 

} 

それは、AJAXはJSONPを使用せずにクロスドメインを動作しません

if (http.readyState == 4 && http.status == 200) { 
    alert(http.responseText); 
    //or 
    document.write(http.responseText); 
    //or 
    document.getElementById('id').innerHTML = http.responseText; 
} 
関連する問題