AJAX的工作原理是基于地理位置?

时间:2011-11-09 22:11:33

标签: jquery ajax

我有一个调用AJAX的网站。它在我的办公室工作,我在那里工作(也就是说,在许多人的计算机上,在不同的系统和浏览器上,而不仅仅是我的),它可以从一台外部计算机(我的一位住在办公室大约10分钟的朋友)工作。 。然而,AJAX在其他所有外部计算机上都失败了。如果我在家里试一试,或者我的另一个朋友在家里试试,那就不行了(我们住在离办公室很远的地方)。这是一个使用jquery的非常简单的AJAX调用。

$(destination).load(url);

我使用Firebug Console进行了检查,发现了这个

AJAX调用列为

GET (url) 200 OK

当它工作时和它不起作用时,除了当它不起作用时,它是红色的,并且在OK和152ms之间有一个'X'图标(或者它花了很长时间)。 / p>

Params选项卡 - 无论是否有效都是相同的

标题标签 - 工作时,“请求标头”部分显示:

X-Requested-With    XMLHttpRequest
Cookie  PHPSESSID=*******

但是当它不起作用时,这些行不存在,而是有一行'Origin'(其中只有主要的站点URL)。

响应/ HTML标签 - 当它不起作用时为空。

正如我所说,我已经测试了浏览器,计算机,Mac,PC等,它们都在办公室工作,但不是在任何遥远的地方。非常感谢任何帮助。

更新

我创建了一个测试页面来分离代码。测试页面工作了一段时间,然后停止工作(令我感到困惑)。所以我现在认为我的代码有错误,但是错误在某些情况下被浏览器忽略了(原版仍在办公室工作,而测试却没有)。

测试页应该有'工作!'单击“测试”链接时弹出。这是代码:

<?php
$call = $_GET['call'];
echo $call;
if($call == 'yes') //check for call
{
    echo 'Worked!';
    exit(); 
}
?>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript">
function callAjax(call){
var dest = "#result";
var url = "http://www.test/page/url.php";
var query = "?call="+call;   //turn call into a query string
url = url+query;   //Add querystring to url
$(dest).load(url);   //make the call
}
</script>

<!DOCTYPE html><html><head><title>Test</title></head>
<body>
<a href="javascript:callAjax('yes')">test</a>
<div id="result"></div>
 </body>
 </html> 

2 个答案:

答案 0 :(得分:0)

您可以采取以下措施来尝试定位“错误”。

  • (如果可能)测试项目的Ajax请求。在项目中创建一个独立的(刚下载的jquery.js文件)页面,该页面加载预期的内容并查看它是否有效。在这种情况下,“bug”与您的项目本身有关。

  • 我发现当URL与我正在加载URL的主机不匹配时,标头中没有XmlHttpRequest。 (例如尝试加载google.com页面)。检查您是否没有进行跨域请求。 (我不这么认为,因为它适用于你的朋友)

[极端的一个]

  • 我不知道它是什么类型的项目(公共或不公开),但我已经在一个项目中,数据库访问仅限于某些IP地址。在给定区域中的IP地址是相似的,因此它可能适用于您的朋友,因为他住在您的办公室附近,而不是在家中,因为IP地址太不同了。

我不确定上述任何提议可能是您问题的解决方案,但可能会有所帮助。

答案 1 :(得分:0)

问题在于使用url的绝对路径。无论“www”是否在地址栏中,代码都很重要。因此,如果您转到地址栏中带有“www”的页面,但它不在代码网址中(反之亦然),则无效。

它在某些人的计算机上不起作用的原因是因为当他们访问该页面时,那些人没有放入“www”并且他们的地址栏与代码网址不匹配。

感谢icktoofay让我走上正确的道路来解决这个问题。