2011-07-18 9 views
6

phonegapはローカルのhtmlファイルに基づいているので、リモートサーバーのベースURLについてはわかりません。 jqueryを使ってajaxリクエストのベースURLを設定する最も良い方法は何ですか?誰かがサンプルへのリンクを提供できますか?Jqueryを使用してajaxリクエストのベースURLを設定する最も良い方法は何ですか?

現在、私はjquery ajaxプレフィルタを使用することについて考えています。

答えて

12

私はこの問題に取り組んだとき、タグにデータ要素としてその情報を入れました。その後、

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

そして、与えられた要求のために適切なURLを構築中であることを使用:

//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), ... }); 

これは、PhoneGapの私の経験のために素晴らしい仕事。うまくいけば、これは役に立ちます。

+0

ありがとうございました。私たちのアプリケーションは、phonegapモードとブラウザモードでも動作します。だから私はURLの生成を変更し、追加のヘルパー関数を挿入したくない。 –

+0

公正であるために、これは両方のブラウザとPhonegapで正常に動作します。それは単にあなたがpreFilterを使ってやろうとしていることを明示的に行うことです。 – ghayes

+0

私が持っていたファイルはすでにベースのhrefを頭で使っていました。だから私はこれと基本的なhrefの例に投票しました。もちろん、私はこの例から$(document.body).data( 'base')を取り出しただけです。ありがとう! – Bretticus

29

これを行う意味的に正しい方法は<base>タグを使用することです:

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

を次に、このような値が取得(残念ながらjQuery.ajax()を自動的にこの値をピックアップしていません):

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

要素参照:確立回答のhttp://www.w3.org/TR/html4/struct/links.html#edef-BASE

+0

これはあなたがこれを行うべきだということに私は同意しますが、私はいつも頭の中でベースhrefを使うのが好きではありません。私はまだこれとデータバージョンに投票しました。ありがとう。 – Bretticus

+0

クリーンな方法です。私のためにうまくいった。ありがとう!! – svrcoder

18

の両方が大きな欠点を持っています。リクエストを行うたびにURLをマッサージするために関数を呼び出さなければならないことは、余分なタイピングです。ページにベースタグを追加するとほとんどの時間がかかりますが、SVGで大量の作業を行っている場合は、いくつかの問題が発生します。ベースタグを使用せずにすべてのURLを一度に修正する簡単な解決法があります。

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

これは答えの隠された宝石です。あなたが$ .ajaxの呼び出しを制御していないレガシーコードを扱っているのであれば大丈夫です。 – corbin

+1

答えはかなり正解です.AJAX呼び出しがbeforeSendコールバックを定義する場合にはうまくいかない:( – sanjeev

+0

本当です、このJavaScriptをアプリケーションのブートストラッププロセスの始めに置く必要があります – user393274