Çapraz Domain Ajax JQuery / PHP ile Talebi

6 Cevap php

Alabilirsen eğer, yardım

Durum:

http://foobar.com uzaktan barındırılan javacript dosyasını içerir (http://boobar.com/stuff.js).

Amaç sadece foobar.com üzerinde uzaktan barındırılan php script bir uyarı almak için

Ben stuff.js de aşağıdaki kodu denedim:

$.ajax({
  type: "GET",
  url: "http://www.boobar.com/script.php?callback=?",
  dataType: 'jsonp',
  success: function(result) { alert(result); }
});

Hayır şans.

$.getJSON("http://www.boobar.com/script.php?jsonp=?",
  function(data) { alert(data); }
);

Ayrıca hiçbir şans.

Php tarafta ben de aşağıdaki denedim:

return json_encode(array(0 => 'test'));

echo json_encode(array(0 => 'test'));

Firefox'ta bir güvenlik hatası alıyorum. Bunu ben güvenlik modeli ihlal sanıyor anlıyorum. Ancak, jquery belgelere göre, bunu gerçekleştirmek mümkün olmalıdır.

6 Cevap

Hata Same Origin Policy bir güvenlik özelliği gibi görünüyor:, basitleştirmek için sadece menşeli sunucuda şeyler için AJAX isteklerini yapabilirsiniz (http://foobar.com). Bu etrafında bir yolu menşeli sunucuda, örneğin basit bir cephe yapmak için:

 <?php
 // this file resides at http://foobar.com/getstuff.php
 echo file_get_contents('http://www.boobar.com/script.php?callback=?'
          . $possibly_some_other_GET_parameters );
 ?>

Sonra, foobar.com gelen, http://foobar.com/getstuff.php (sırayla bir HTTP GET isteği from your web server boobar.com yapar ve geri gönderir hangi bir AJAX isteği yapabilirsiniz tarayıcı).

Tarayıcıya, istek origin sunucusuna gider ve (tarayıcı tepki başka bir yerde sahne arkasında geldiğini bilmenin bir yolu vardır) izin verilir.

Uyarılar:

  • foobar.com de PHP yapılandırma allow_url_fopen "1" ayarlanmış olmalıdır. Bu varsayılan ayar olmasına rağmen, bazı sunucular devre dışı olması.
  • www.boobar.com için istek foobar.com dan server değil, tarayıcıdan yapılır. Bu sadece ne olursa olsun isteği URL koymak ("$possibly_some_other_GET_parameters"), çerezlerin gelir ya da kullanıcı kimlik doğrulama veri www.boobar.com gönderilir.

Sen uyumsuz script etiketlerini ve json kullanarak başka bir sunucudan veri alabilirsiniz:

<script type="text/javascript" src="http://somesite.com/path/to/page/"></script>

Sen bir değişken olabilir ki, dinamik (DOM'ye yükleme sonra, yeni bir komut öğesi oluşturulur ve src niteliğini ayarlayarak) uzak bir javascript yüklemek için kullanabilirsiniz. Ancak, ihtiyaç gerçekten trust uzak bir site, JS değerlendirilecektir çünkü without any precondition.

"Window.name taşıma" veya (bu aslında bir hata olup olmadığından emin değil) genel bir tarayıcı hata kullandığı "window.name yöntemi" denilen bir yöntem yoktur. Sen bir iFrame yoluyla istek yapmak ve yüklenen sayfa kendisi JavaScript pencere nesnenin "name" özelliği için gereken bilgileri koyar.

Ilk hedef sayfaya gider ve sonra "aynı kökenli ilke" kısıtlama üstesinden blank.htm sayfaya geri gider çünkü bu yöntem, bir "blank.htm" kullanır.

Dojo bu hayata geçirdik ve burada daha ayrıntılı bir açıklama bulabilirsiniz: http://www.sitepen.com/blog/2008/07/22/windowname-transport/

Ayrıca ben burada bulabilirsiniz yazdım kütüphanede bu yönteme dayalı bir çapraz-etki XMLHttpRequest nesnesini hayata geçirdik: http://jslib-test.amplio-vita.net/JSLib/js/aV.main.ajax.js

http://jslib-test.amplio-vita.net/JSLib/js: Sen burada bulabilirsiniz 1 veya 2 ek kütüphaneleri gerekir beri kütüphane kullanımı mümkün olmayabilir

Eğer tarzı bunu uygulamak daha fazla yardıma ihtiyacınız olursa, elimden geleni yapmaya çalışacağım.

Yani bu sadece bir GET beri ne yapıyor sona erdi, - hiçbir veri alınır gerekir - Ben kaynak olarak ayarlamak geçmek istedim değişkenleri içeren URL ile gizli bir iframe oluşturmak JQuery kullanılır. Bir cazibe gibi çalıştı. Geribildirim provded herkese - Teşekkürler!

Buna ne dersin! Bir php proxy kullanarak.

Cross-Domain AJAX calls using PHP http://www.phpfour.com/blog/2008/03/cross-domain-ajax-using-php/

jQuery. ajax da bir ayar 'crossdomain' vardır.

http://api.jquery.com/jQuery.ajax/

crossDomain (default: false for same-domain requests, true for cross-domain requests)
Type: Boolean
If you wish to force a crossDomain request (such as JSONP) on the same domain, set the value of crossDomain to true. This allows, for example, server-side redirection to another domain. (version added: 1.5)