Ajax hatası - "izin engellendi"

5 Cevap php

Üzgünüz, bu muhtemelen daha uzun görünüyor ama ben bütün bilgileri içermelidir düşündüm!

Ben dinamik bir sayfada bir

içine içerik getirmek için basit bir Ajax komut dosyası kullanıyorum. Div içine bazı yeni içerik yüklemek için ilk istek çalışıyor, ama sadece yüklendikten içeriğinde bir Ajax "geri" linki var, eğer bir hata atmak gibi görünüyor.

Hatta yabancı, benim ofis ağ üzerinde çalışır, ama ben bir ev ya da VPN ağ üzerinde isem başarısız. Başarısız olursa, bu hata JavaScript ayıklayıcısında açılır:

Line: 12
Char: 11
Error: Permission Denied
Code: 0
URL: http://www.url.com/about.php

Kod gerçekten sadece biraz W3 web sitesinde şeyler versiyonu etrafında hacklenmiş, karmaşık değil, ama dönüş çağrısı "inkar" olduğu gerçeği beni karıştırıyor. Bu betik saldırılarını durdurmak için, sunucu IIS yapılandırması içinde bir şey olurdu? (Random düşünce?)

Herhangi bir yardım mutluluk ;)

First - the Ajax script

var myHttpRequest = false;
if(window.XMLHttpRequest)
     myHttpRequest = new XMLHttpRequest();
else if(window.ActiveXObject)
     myHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
function loadContent(source, content)
{
     if(myHttpRequest)
     {
          var data = document.getElementById(content);
          myHttpRequest.open("GET",source);
            data.innerHTML = '<div class=\"loading_image\"><img src=\"images/loading.gif\" width=\"54px\" height=\"55px\" alt="loading" /></div>';
          myHttpRequest.onreadystatechange = function()
          {
               if(myHttpRequest.readyState==4)
                    data.innerHTML = myHttpRequest.responseText;
                    $('#col2_2_content').supersleight();
          }
          myHttpRequest.send(null);
     }
}

Sonra bu Ajax içeriği çağırır ve her şey takılı alır col2_2_content Div vardır sayfanın kesilmiş bir örnektir. Dosya ajax.js baş bölümünde başvurulmaktadır.

<div id="col2_2_content">
    <div class="mugshot_container">
        <img src="images/mugshot_dh.jpg" onClick="loadContent('about/dh.php?ajax=yes', 'col2_2_content');"/>
    </div>
</div>

Ve bu iade edilmelidir ne karar PHP biçimlendirme ile birlikte, Ajax ile sokulur about/dh.php kodudur. (Doğrudan çok çağrılacak tasarlanmıştır - bu sarılı bir başlık / altbilgi aldığı durumda).

<?php
$home_url = "http://www.website.com/url/";
$content = "
    <p>Some Text</p>
    <p><a onClick=\"loadContent('$home_url/about/about-main.php?ajax=yes',  'col2_2_content');\">Back</a></p>
";
if (isset($_REQUEST['ajax']) ) {
    echo $content;
} else {
    include_once 'about-header.php';
    echo $content;
    include_once 'about-footer.php';
}
?>

5 Cevap

Çapraz etki istek durumda kendinizi var. AJAX istekleri temelde sadece sayfasını hizmet sunucuya yapılabilir. Script sayfa http://website.com/url yüklenir Yani, http://website.com/ herhangi bir çağrı ama http://url.com başarısız olacağını herhangi bir arama yapabilirsiniz.

Eğer document.domain = "example.com" çalıştırırsanız http://s2.example.com den http://s1.example.com çağırmak mümkün olduğunu söyledikten sonra.

Eğer gerçekten etki alanları arasında verilere erişmek için gerekiyorsa, bunu yapmak için birkaç yol var. Biliyorum basit bir sorgu yapmak için <script> etiketini kullanmaktır. Herhangi bir src istediğiniz ve tarayıcı oraya gitmek ve sizin için komut alıp ile <script> etiketi eklemek için belgeyi düzenleyebilirsiniz. Yani kontrol eğer http://url.com, sadece bunun yerine HTML sayfasının bir javascript oluşturmak yapabilir ve bu komut dosyası yüklendi ve idam olurdu. Bu yöntem, JSONP çalışması için kullanılır.

IE bu durumda o kadar kısıtlamalar koymak değil çünkü Cross-site scripting yerel ağ güvenlik sorunları olmadan çalışabilir. Hatta LAN içinde başka bir tarayıcıda çalışacak ama ben şüpheliyim.

Eğer same origin policy sorunlar yaşıyorsanız gibi kuşkuyla sesler "İzin engellendi".

$home_url XMLHTTP istekte sayfa olarak aynı etki alanında yer alır?

Reddedildi hata VPN üzerinden değil, ofiste görüyorsanız Özellikle bu yana, bu gibi geliyor, çünkü etki veya güvenlik bölgeleri arasında içerik istemek için bir girişim ... (http://msdn.microsoft.com/en-us/library/ms537505%28VS.85%29.aspx#xdomain) hemen hemen her zaman Bu sorun olabilir.

I Firebug veya isteği ne olduğunu görmek sağlayan bazı diğer hata ayıklama aracını ateşe veririm.

Zaten yayınlanan tüm cevaplar göz önüne alındığında. Ben göreli URL'ler kullanın öneririm. XMLHttpRequest inanıyorum son tarayıcılarda çapraz etki alanı gidebilirsiniz. Bunun için teknik W3C tarafından bir süre önce serbest bırakıldı.

http://www.w3.org/TR/access-control/: Ben bu olduğuna inanıyorum

Eğer çapraz etki alanı gitmek istiyorsanız da dinamik script etiketlerini kullanabilirsiniz. İşte en popüler gibi görünüyor. Genellikle, bu javascript sayfa parametresi olarak JSON, bir geri arama yazma ile uygulanmaktadır.

Orada tarayıcıda çapraz etki http sağlamak için pek çok yol vardır, ama bir proxy kullanmak sürece hepsi, önceki kurulum içerir. Aslında JavaScript ile yanıt veren bir proxy kullanabilirsiniz, böylece vekil de uzak bir etki olabilir.

Burada bir örnek var:

http://json-proxy.jgate.de/

Burada özellikle XML kaynaklarını tüketir ve JSON ile yanıt kurmak başka bir şeydir.

http://jsonproxy.appspot.com/

if ($_SERVER['HTTP_HOST'] == "mysite.com") {
$home_url = "http://mysite.com/testing/rebrand/";
} else {
$home_url = "http://www.mysite.com/testing/rebrand/";	
}

Işte koyarak, bir yorum, bu açamazsınız ;)

Bu hile yaptı - Ben etki ayırt config.php bu ekledi. Şimdi herşey A-Tamam çalışır. Teşekkürler çocuklar :)