2011-07-18 13 views
6

Phonegap yerel html dosyasına dayandığından, uzak sunucunun temel URL'si hakkında bilgi yoktur. Jquery kullanarak ajax istekleri için temel url ayarlamak için en iyi yolu nedir acaba? Herhangi biri örnekle bağlantı kurabilir mi?Jquery kullanarak ajax isteği için temel url kurmanın en iyi yolu nedir?

Şu anda jquery ajax önfiltresini kullanmayı düşünüyorum. Bu sorunu ele aldığımda, bu bilgiyi etiketteki bir veri öğesi olarak ekledim

cevap

12

//If pathOrURL is a relative path (e.g. /users/1), then we return a qualified 
// URL, such as http://mydomain.com/users/1 
// otherwise, we return the URL as is 
var qualifyURL = function(pathOrURL) { 
    if (!(new RegExp('^(http(s)?[:]//)','i')).test(pathOrURL)) { 
    return $(document.body).data('base') + pathOrURL; 
    } 

    return pathOrURL; 
}; 

//Use this helper function when calling $.ajax 
$.ajax({ 
    url: qualifyURL(url), ... }); 

Bu PhoneGap ile benim deneyim için büyük çalıştı:

<body data-base="http://mydomain.com"> ... 

Ve sonra belirli bir isteğin doğru URL'yi dışarı binada kullandık. Umarım bu yardımcı olur.

+0

Teşekkürler. Bizim uygulama telefongap modunda ve tarayıcı modunda da çalışır. Bu yüzden, url neslini değiştirmek ve ek yardım işlevleri eklemek istemiyorum. –

+0

Adil olmak gerekirse, bu hem tarayıcılarda hem de Phonegap'te gayet güzel çalışır. Sadece preFilter ile yapmak istediğiniz şeyi açıkça yapıyor. – ghayes

+0

Sahip olduğum dosya zaten baş href kullanıyordu. Bu yüzden buna ve taban href örneğine oy verdim. Tabii ki bu örnekten $ (document.body) .data ('base') aldım. Teşekkürler! – Bretticus

29

Bunu yapmanın semantik doğru yolu <base> etiketi kullanmaktır:

<head> 
    <base href="http://mydomain.com/"> 
</head> 

Sonra böyle değerini almak (maalesef jQuery.ajax() otomatik olarak bu değeri alması değil):

$('head base').attr('href'); 

Eleman referansı: kurulan cevapların http://www.w3.org/TR/html4/struct/links.html#edef-BASE

+0

Bunu nasıl yapacağınıza katılıyorum, ancak her zaman kafa hrefini kullanmayı sevmem. Hala bunun için ve veri sürümü için oy verdim. Teşekkürler. – Bretticus

+0

Bunu yapmanın temiz yolu. Benim için harika çalıştı. Teşekkürler!! – svrcoder

18

İkisi de önemli sakıncaları vardır. URL'ye masaj yapmak için çağrılması gereken bir işlev, her istekte bulunduğunuzda çok fazla yazım gerektirir. Bir sayfaya temel etiket eklemek çoğu zaman işe yarar, ancak SVG'lerle ağır iş yapıyorsanız bazı sorunlara neden olur. Temel etiketini kullanmadan tüm URL'lerinizi bir kerede düzelten basit bir çözüm.

var baseUrl = 'http://my.hardcoded.url/'; 
$.ajaxSetup({ 
    beforeSend: function(xhr, options) { 
     options.url = baseUrl + options.url; 
    } 
}) 
+2

Bu bir cevabın gizli bir mücevheridir. eski kod ile ilgileniyorsanız, $ .ajax çağrılarının kontrolünü elinizde bulundurmuyorsanız, – corbin

+1

cevabınız oldukça doğrudur, ne işe yaramazsa ajax çağrısı Call for the beforeSend Callback :( – sanjeev

+0

Bu doğrudur, Bu yüzden bu JavaScript'i uygulamanızın önyükleme işleminin başlangıcına doğru koymalıydınız – user393274

İlgili konular