0

次の Ajax 呼び出しがあります。

function loadFPFeed(catid)
{
    var dataStream = 'catid=' + Number(catid);
    var failMsg = 'Sorry, but there was a problem retrieving the news feed. Please try again later.';
    $.ajax({
        type: 'POST',
        url: "ajax/load-sp-feed.php",
        data: dataStream,
        cache: false
    }).done(function( res ) {
        if(res != false)
        {
            $('#ppContent').html(res);
            $('#ppContentCover').fadeOut(200, function() { $(this).remove(); });
        }
        else
        {
            $('#ppContentCover').html('<div id="failMsg">' + failMsg + '</div>');
        }
    }).fail(function( res ) {
        $('#ppContentCover').html('<div id="failMsg">' + failMsg + '</div>');
    });
}

これは、ページ内のニュースフィードを取得するために使用される PHP ファイルを呼び出します。

<?php

$catid = intval($_POST['catid']);

require_once '../classes/Element.php';

$obj = new Element();

$obj->spNewsFeed($catid);

?>

私がやりたいことは、すべての Ajax 呼び出しを独自のフォルダーに入れることです。ただし、相対 URL を実行すると、常に壊れます。問題は、PHP クラス ('Element.php') への相対パスが、Ajax ファイルまたは Ajax 呼び出しを行うページのいずれかで常に無効になることです。これは、両方のファイルが異なるディレクトリにあるためです。

今のところ、Ajax 呼び出しを、呼び出しを行っているページと同じディレクトリに配置するだけで解決しましたが、整理されていないので気に入りません。すべての必要なクラス呼び出しを絶対 URL に変更するだけで済みますが、実稼働サーバーにアップロードするときにすべてを変更する必要があります。

利用可能なアイデアやベストプラクティスはありますか? それとも、単純に Ajax ファイルをページ ファイルと同じフォルダーに配置する必要がありますか?

4

2 に答える 2

2

フレームワークの使用を検討することを強くお勧めします。( Yiiは良いものです。) フレームワークは、このようなものをエレガントに処理します。

また:

  1. POST ではなく GET を使用します。データを POST するのではなく、GET しています。
  2. PHP ファイルを「ajax/」ディレクトリに配置しないでください。これは ajax 固有のファイルではありません。適切な Web フォームを使用して今すぐ POST すると、同じ結果が得られます。

フレームワークを使用できない場合は、グローバル ヘルパー関数を使用して URL を作成および操作することを検討してください。

例えば:

/**
 * Create an absolute URL relative to the base path
 * 
 * (You'd want to modify this to normalize the path...)
 * 
 * @return string
 **/
function createUrl($relativePath)
{
    return getBasePath().normalizePath($relativePath);
}

/**
 * Returns the base path in the current environment
 **/
function getBasePath()
{
    return 'http://localhost:8080/';
}

/**
 * Normalizes the given path ('path/to/my/file') to some
 * consistent form. E.g., might make sure there's a 
 * leading '/'.
 **/
function normalizePath($path)
{
    return $path;
}
于 2013-07-28T18:54:20.680 に答える
0

これは意味がありません.AJAX呼び出しを行うページはElement.phpファイルを使用していませんか? もしそうなら、それは別のコードであるため、そこでのみパスを変更でき、修正されます。

ajax/load-sp-feed.phpページがロードされたときにそこにも印刷したいので、ページにを含めている場合。あなたは何か間違ったことをしています。ページ自体で ajax ファイルを使用しないでください。

于 2013-07-28T18:53:02.660 に答える