1

私は Laravel 4 を初めて使用し、自分の Web サイトを Laravel 4 に変換できるかどうかを確認しています (以前はフレームワークなしで作成されていました)。AJAX (jQuery 経由) を取得して、コントローラーと適切にやり取りすることができません。

最初に、私が作業しているコントローラーが呼び出され、以下に示すIndexController.php関数が呼び出さtypesれます。

class IndexController extends BaseController {

// Other controller functions

public function types($brand) {

    $types = DB::select('select * from aircraft_types where brand_id = ?', array($brand));

    echo json_encode($types);

}

}

この関数は、データベースからデータを (JSON 形式で) 返します。次に、このコントローラーへのルートを作成し、次のように機能させました。

Route::get('types/{id}', array('uses'=>'IndexController@types'));

//localhost/lavarel/public/types/1 に移動して、ルートと関数が機能していることを二重に確認しましたが、実際には正しい JSON データが返されます。

問題の jquery 関数は次のとおりです。

function updateTypes($brand) {

$("#type").append('<option value="test">Test...</option>'); // This executes correctly

$.getJSON('/types/'+$brand, function(data) {
    $("#type").append('<option value="test 2">Test 2...</option>'); // This does not
// Some other JSON related code
});

関数がどこで機能するかをテストするために、使用している項目を編集する 2 行を挿入しました。最初の「テスト」オプションが追加されているため、関数は正しく呼び出されています。ただし、テスト コードの 2 行目は実行されないため、コールバック関数がアクティブになることはないようです。

問題は、私が JavaScript に提供している URL にあると思われます'/types/'+$brand。いくつかのチュートリアルで、提供する URL の前に BASE 変数が使用されているのを見たことがありますが、上記のコードが機能しない理由がわかりません。ポインタはありますか?

私が間違っているところを誰かに説明してもらえますか?

4

2 に答える 2

4

laravel プロジェクトへの基本パスは ですlocalhost/laravel/public/が、AJAX リクエストはlocalhost. これを修正する方法はいくつかあります。

方法 1:

これは最も好ましい方法です。(私の意見では)

Web サーバーの起動に nginx や apache を使用する代わりに、PHP の組み込み Web サーバーを使用できます。

ターミナル ウィンドウ (または Windows では cmd) を開き、cd でプロジェクトのメイン ディレクトリ (ベンダー、アプリ、およびパブリック ディレクトリを含むディレクトリ) に移動し、コマンドphp artisan serve. これにより、localhost:8000 に PHP サーバーが作成され、ベース パスは になります/

php artisan help serve"たとえば、すべてを見たい場合など、多くのオプションがあります。

完了したら、コードが機能するはずです。

方法 2

nginx または apache を使用する場合は、プロジェクトに仮想ホストを追加する必要があります。

これは、構成を介して行うことができます。

アパッチ: http://httpd.apache.org/docs/current/vhosts/examples.html

Nginx: http://wiki.nginx.org/ServerBlockExample

その後、hosts ファイルに新しいエントリを追加する必要があります。

方法 3

あなたが言ったように、の前に BASE 変数を追加できます'/types/'+$brand

リクエストは に送信されlocalhost/types/$brandます。

に行く必要がありlocalhost/laravel/public/types/$brandます。

と交換'/types/'$brandするだけ'/laravel/public/types'+$brand

于 2013-07-11T09:33:31.157 に答える