2011-05-07 49 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
相關問題