Göreceli vs mutlak URL'ler: jQuery AJAX istekleri ile sorun

4 Cevap php

Benim AJAX istekleri bir hazırlama sunucusuna üzerinde çalışmak için almak zor bir zaman yaşıyorum. Hepsi benim geliştirme makinede iyi çalıştı, ama en kısa sürede bunu tarih olarak, tüm AJAX istekleri çalışmayı durdurdu. Ben mutlak adresler göreli URL'ler (örn. "index.php") ("http://mydomain.com/index.php") değiştirirseniz istekleri tekrar çalışmak, ama neden anlamıyorum, öğrendim.

Örnek istek:

jQuery.post('index.php', {id: 1234, action: 1, step: 1}, function(data) { // something });

Bu bile kundakçı konsolunda görünmüyor, çalışmıyor. Başarı işleyicisi çok kafa karıştırıcı olsa da, hangi denir.

Bu sadece iyi çalışır:

jQuery.post('http://mydomain.com/index.php', {id: 1234, action: 1, step: 1}, function(data) { // something });

AJAX istekleri bu şekilde davranmasına neden kimse açıklayabilir misiniz? x_X

4 Cevap

Kökünden bakmak için zorlamak için ilk örnekte index.php önce / eklemeyi deneyin. Dizin-yapıları exactly index.php olduğu konusunda aynı olduğundan emin olmak için çift kontrol.

Bu eski bir yazı olduğunu, bu yüzden dışarı sürüklemek için üzgünüm. Ama açıkçası benim sorun ile alakalı olduğunu ve Google'da en iyi sonuç oldu.

Bazı aynı sorun ile deney sonra ben cevabı tespit ettik.

Eğer istenen dosya, komut dosyası çalıştıran olursa olsun / göredir

For example, in my file structure I have a folder named js. Under it is my ajaxProcess.js file. The xml file i was trying to read was located in the same directory, so following standard rules it made sense for the url of the ajax call to simply be url: 'myfile.xml' however, this did not work.

Bazı etrafında oynadıktan sonra benim xml yerleştirilir ve / tekrar ajax koştu. Vuala!

Biraz daha oynamak, ve ben de tüm js çağrı nerede farketmez keşfetti, hala / varsayılan olacaktır

Bir klasör 'xml' ve şimdi aşağıdaki ajax yerden çalışacak benim xml yerleştirerek sona erdi:

$.ajax({
        type:'get',
        dataType: 'xml',
        url: 'xml/class.xml',
        success: function(xml){
            $(xml).find('class').each(function(){
                //code here
            })
        }
    });

URL yönlendirme kullanarak IF, bir MVC çerçevesinde örneğin, her zaman sayfaya göre olacaktır yürütme mutlaka adres çubuğuna URL eşleşmiyor, hangi geçiyor.

Aşağıdaki dosya yapısını göz önünde bulundurun:

mysite/index.php
mysite/resources/javascript/my_javascript.js
mysite/resources/css/my_css.css

Usually, MVC frameworks route all page requests through a single file, such as index.php, ( http://www.mysite.com/index.php ). This makes it easy to use relative urls because resources and scripts will always be in the same relative path. Javascript will always be in /resources/javascript/ CSS will always be in /resources/css/

olursa olsun tarayıcınızın adres çubuğuna budur. Bu olabilir:

http://www.mysite.com/index/
http://www.mysite.com/kittens/
http://www.mysite.com/kittens/cute/
http://www.mysite.com/kittens/fluffy/
etc..

Ben sorunların bu tür önlemek için en iyi yolu HTML kafasına JavaScripts için bir yapılandırma dosyası kurmak olduğunu düşünüyorum. Siz sayfa kafasına böyle bir şey içerebilir:

<script>
        var url = "http:\/\/www.yourdomain.com\/application";
        var path = "\/path\/on\/server\/to root folder";
</script>

Başka bir yaklaşım pencere nesnesine bu değişkenleri eklemek için:

 <script>
window.myUrl = "http:\/\/www.yourdomain.com\/application";
...
    </script>

Yani, daha sonra siz js dosyaları içinde bu değişkenleri kullanabilirsiniz:

jQuery.post( url+'/index.php', {id: 1234, action: 1, step: 1}, function(data) { // something });

başlığındaki script otomatik olarak oluşturulan, app config dayalı olabilir, bu yüzden uygulama dağıtıldığında url ve yolu değişkenler buna göre değiştirilir.