2011-05-07 81 views
1

也许我做错了什么,但尝试此示例在您的服务器/本地如果我有本地ajax.php文件并运行请求本地它的工作原理,但一旦ajax.php是远程它不会工作。为什么不在两个不同的服务器之间运行ajax?

<!DOCTYPE html> 
<html> 
<head> 
</head> 
<body> 
<p></p> 



<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js"></script> 
<script type="text/javascript"> 

$(document).ready(function() 
{ 

    window.setInterval(function() 
    { 
     $.ajax({ 
      url: 'ajax.php', 
      type: 'GET', 
      dataType: 'json', 
      cache: false, 
      success: function(result) 
      { 
       $('p').html(result.price); 
      } 
     }); 
    }, 2000); 


}); 

</script> 
</body> 
</html> 

回答

4

JavaScript只能从同一主机加载数据,这称为SameOrginPolicy。简而言之,这大致意味着嵌入在ServerA上的HTML文件中的JavaScript代码只能通过AJAX请求来自ServerA的文档。这是出于安全原因而完成的。

如果您确实需要从外部服务器加载数据,则可以尝试使用JSONP。例子可以通过Google找到,例如here

+0

我该怎么办两个不同的服务器之间的AJAX? – 2011-05-07 16:14:15

+0

看到我上面的修改。 – theomega 2011-05-07 16:15:12

+0

谢谢,我发现这个网站http://sprain.ch/blog/2010/07/07/jsonp-jquery-and-php-make-cross-domain-ajax-calls-work/,我想知道为什么不能尝试$ .ajax而不是$ .getjson,它的工作原理,但我喜欢你给更多的网站上的例子。谢谢 – 2011-05-07 16:54:38

-1

这是因为Javascript的同源策略。出于安全原因,Javascript是基于此策略构建的。

http://en.wikipedia.org/wiki/Same_origin_policy

但是,你可以用JSONP跨域请求。

+1

你能告诉我一个样本基于我有什么?日Thnx。我试图做的是做一个从shopify.com到允许服务器端代码的另一个服务器的ajax调用,而shopify.com只允许html,css和javascript – 2011-05-07 16:15:48

+0

我提供的答案有什么区别? – theomega 2011-05-07 16:16:54

+0

@theomega它是一个不同的作者(我)。在我写解决方案时,您可能首先发布了您的解决方案。我不认为这是给我投票的理由。我并不是很傻,“复制”另一个人的解决方案,我的等级就是证明。 – 2011-05-07 16:38:54

2

Javascript不允许跨域请求。我问了一个非常类似的问题最近,可能有用的答案给你:3 ways to make a cross-domain request in Javascript

这里有几个:

  • 使用Ajax XMLHttpRequest来调用服务器端脚本获取所需的请求。即PHP和卷曲
  • JSON get请求
  • jQuery的Ajax请求http://api.jquery.com/jQuery.ajax/
  • 卷曲,文件获取内容,而AJAX (回声HTML或JSON)使用闪光灯
  • 您可以使用
  • 跨域 访问控制允许来源: 其他域上的服务器上的 标题中的*。然而,只有这个问题是依赖于现代的浏览器 。不会在IE 比8年长看到工作 https://developer.mozilla.org/En/HTTP_access_control
相关问题