我有一个调用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>
答案 0 :(得分:0)
您可以采取以下措施来尝试定位“错误”。
(如果可能)测试项目的Ajax请求。在项目中创建一个独立的(刚下载的jquery.js文件)页面,该页面加载预期的内容并查看它是否有效。在这种情况下,“bug”与您的项目本身有关。
我发现当URL与我正在加载URL的主机不匹配时,标头中没有XmlHttpRequest。 (例如尝试加载google.com页面)。检查您是否没有进行跨域请求。 (我不这么认为,因为它适用于你的朋友)
[极端的一个]
我不确定上述任何提议可能是您问题的解决方案,但可能会有所帮助。
答案 1 :(得分:0)
问题在于使用url的绝对路径。无论“www”是否在地址栏中,代码都很重要。因此,如果您转到地址栏中带有“www”的页面,但它不在代码网址中(反之亦然),则无效。
它在某些人的计算机上不起作用的原因是因为当他们访问该页面时,那些人没有放入“www”并且他们的地址栏与代码网址不匹配。
感谢icktoofay让我走上正确的道路来解决这个问题。