jQuery AJAX çapraz etki alanı

Burada iki sayfa var, test.php ve testserver.php.

test.php

<script src="scripts/jq.js" type="text/javascript"></script>
<script>
    $(function() {
        $.ajax({url:"testserver.php",
            success:function() {
                alert("Success");
            },
            error:function() {
                alert("Error");
            },
            dataType:"json",
            type:"get"
        }
    )})
</script>

testserver.php

<?php
$arr = array("element1",
             "element2",
             array("element31","element32"));
$arr['name'] = "response";
echo json_encode($arr);
?>

Şimdi benim sorunum: bu dosyaların her ikisi de aynı sunucuda (localhost veya web sunucusu) olduğunda, çalışıyor ve alert("Success") çağrılıyor; Farklı sunucularda ise, yani web sunucusunda testserver.php ve localhost'ta test.php, çalışmıyor ve alert("Error") çalıştırılıyor. Ajax içindeki URL http://domain.com/path/to/file/testserver.php olarak değiştirilse bile

Çözüm

JSONP][1] kullanın.

jQuery:


$.ajax({
     url:"testserver.php",
     dataType: 'jsonp', // Notice! JSONP 
Yorumlar (11)

Aynı Menşe Politikası]1'e bir göz atmanız gerekir:

Bilgi işlemde, aynı menşe politikası için önemli bir güvenlik kavramıdır. tarayıcı tarafı programlama sayısı JavaScript gibi diller. Bu ilkesi üzerinde çalışan komut dosyalarına izin verir aynı siteden gelen sayfalar birbirlerinin yöntemlerine erişmek ve belirli bir özelliği olmayan özellikler kısıtlamaları, ancak aşağıdakilere erişimi engeller genelinde çoğu yöntem ve özellik farklı sitelerdeki sayfalar.

Veri elde edebilmeniz için, olması gerekir:

Aynı protokol ve ana bilgisayar

Bunu aşmak için JSONP'yi uygulamanız gerekir.

Yorumlar (1)

Tarayıcı güvenliği, bir etki alanında barındırılan bir sayfadan farklı bir etki alanında barındırılan bir sayfaya ajax çağrısı yapılmasını engeller; buna "same-origin policy" denir.

Yorumlar (1)