0

jquery ajax呼び出しで相対パスを指定するには、いくつかの解決策が必要です../のようなものを使用しています。どんな提案も高く評価されます。

コード

$.ajax({
        type: 'get',
        url: '../../MyPage/getDetails',
        success: function (data) {
            if (data > 0) {
4

3 に答える 3

1

指定したパスは、Webサイトの階層が同じである限り、絶対的な相対パスです。

ajax呼び出しで指定したURLは、常に2つのフォルダーを上に移動し、MyPageで定義されているgetDetailsメソッドを呼び出します。

于 2012-05-22T18:24:21.197 に答える
1

これはちょっとしたハックですが、あなたはクライアント側なので:)

このコードはいくつかの仮定をしています - スクリプトタグがmyscript.js存在するように

ページに次のようなマークアップがあるとします:\

<script src='../js/myscript.js' type="text/javascript"></script>
<div>hiya</div>

では、script タグを使用して、そこからベース URL を取得します :)

使用できる Util クラスを作成し、get base url メソッドを追加して、その値をアラートします。

ここの作業コピー: http://jsfiddle.net/SmCLy/

function Util() { /*...Nothing...*/
}

Util.getBaseURL = function() {
    //<summary>
    //    Returns the application base URL (well, a URL that is
    //    equivalent to such - it may have some "backtracking", 
    //    i.e. "../" at
    //    the end of the URL to simulate the root...)
    //</summary>    
    // 1) Find the script include for this JavaScript file:
    var scriptElements = document.getElementsByTagName("script"),
        getScriptPathFragmentPosition = Util.getBaseURL._getScriptPathFragmentPosition,
        getScriptPathFragmentPositionResult = getScriptPathFragmentPosition(scriptElements, "js/myscript.js"),
        posScriptPathFragment = getScriptPathFragmentPositionResult.posScriptPathFragment;

    // 2) Create the "base" URL by taking the current URL,
    // stripping the page from the end, and appending
    // sufficient "../" sequences to
    // construct the equivalent of the application's root URL:
    var scriptElementSrcLower = getScriptPathFragmentPositionResult.scriptElementSrcLower;
    var backPathToRoot = ((scriptElementSrcLower !== "") ? scriptElementSrcLower.substring(0, posScriptPathFragment) : "");
    var currentPath = location.href;
    var currentPathWithoutPage;
    var PAGE_TOKEN = ".aspx";
    var posPageToken = currentPath.toLowerCase().indexOf(PAGE_TOKEN);
    if (posPageToken > -1) {
        var trimmedPath = currentPath.substring(0, posPageToken + PAGE_TOKEN.length);
        currentPathWithoutPage = trimmedPath.substring(0, trimmedPath.lastIndexOf("/") + 1);
    } else {
        currentPathWithoutPage = currentPath.substring(0, currentPath.lastIndexOf("/") + 1);
    }
    return (currentPathWithoutPage + backPathToRoot);
};

Util.getBaseURL._getScriptPathFragmentPosition = function(scriptElements, scriptPathFragment) {
    var scriptElementsIndex = (scriptElements.length - 1),
        scriptElementSrc = "",
        scriptElementSrcLower = "",
        posScriptPathFragment = -1;

    while (scriptElementsIndex >= 0) {
        scriptElementSrc = scriptElements[scriptElementsIndex].getAttribute("src");
        if (typeof(scriptElementSrc) != "undefined" && scriptElementSrc !== null && scriptElementSrc !== "") {
            scriptElementSrcLower = scriptElementSrc.toLowerCase();
            posScriptPathFragment = scriptElementSrcLower.indexOf(scriptPathFragment);

            if (posScriptPathFragment >= 0) {
                break;
            }
        }

        scriptElementsIndex--;
    }

    var result = {
        posScriptPathFragment: posScriptPathFragment,
        scriptElementSrcLower: scriptElementSrcLower
    };

    return result;
};

alert(Util.getBaseURL());

SO、あなたのページでできること:

var myajaxUrl = getBaseURL()+"MyPage/GetDetails";
于 2012-05-22T19:10:42.780 に答える