2012-03-30 66 views
-1

我有一小段JavaScript代碼將一個字符串傳遞給一個php文件,並等待返回的JSON在一個警告框中呈現。問題是由於交叉視線問題,我不認爲AJAX正在工作。從javascript進行GET調用無WITH ajax

這是我有什麼的JavaScript:

<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,使一個PHP一個呼叫,然後回來一個JSON字符串。我想用這個字符串做更多的事情,但現在我只想讓SOMETHING回來。它不是,我想它是一個域問題(無論那被稱爲JavaScript不會允許你從不同的域做Ajax請求)。

這是我的PHP腳本:

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

這似乎很簡單但果然在JavaScript中的alert框有空白和空。我認爲有一種非Ajax的方式來使PHP的電話找回任何字符串被回顯,因爲我仍然想處理更多...

那麼這裏有什麼嚴重錯誤嗎?我應該注意到,我不太瞭解腳本不允許在跨站點發布的級別。 JavaScript的託管在

my.somesight.edu

,該網站是想轉到是

someother.somesight.edu

我認爲這是主要的領域是好的,但由於其沒有工作顯然沒有(或我的代碼是剛剛分手)

提琴手結果:

它做一個HTTPS隧道從該網站的JavaScript是......這是websession 3至9。然後websession 10次命中有它的PHP腳本的網站:

[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是什麼,我想回去我的javascript..just什麼也沒有發生。

+0

AJAX不會不使用JSONP工作跨域。 – 2012-03-30 20:38:30

+0

在定義'http.onreadystatechange'函數之前執行'http.send(); - 切換順序 – hamczu 2012-03-30 20:41:53

+0

切換順序仍然導致responseText和XML爲空。我將研究更多,如果我有權訪問更改腳本選項並使用JSONP – Codejoy 2012-03-30 21:05:21

回答

0

嘗試安裝Fiddler,並查看您從服務器發送和接收的請求。 如果你仍然無法弄清楚,請在這裏發佈。

+1

嘿,這個提琴手很酷。我不知道它存在。我試圖找出如何使用它,並找到服務器發佈的請求和響應。 – Codejoy 2012-03-30 21:09:00

+0

k發佈編輯問題... – Codejoy 2012-03-30 21:10:20

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 2012-03-30 22:16:20

+0

啊,剛剛意識到OP要求提供非Ajax解決方案,對不起。 – penco 2012-04-01 16:40:53

0

你的JavaScript代碼在這裏並不返回任何數據:

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

} 

應該

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