2012-03-30 82 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; 
}