Bagaimana cara mengkonfigurasi CakePHP 2.5.x untuk bekerja dengan Ajax?

Saya sedang mengerjakan localhost dengan xampp. Saya menginstal aplikasi cakePHP di C:\xampp\htdocs\mynewapp\ sehingga saya dapat mengakses website CakePHP saya melalui

http://localhost/mynewapp

Saya dapat mengakses semua halaman saya. Ini berfungsi dengan baik tetapi saya menemui beberapa masalah dengan melakukan beberapa panggilan Ajax.

Ini adalah konfigurasi .htaccess saya: C:\xampp\htdocs\mynewapp.htaccess

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase    /linagal/app/
RewriteRule    ^$ app/webroot/    [L]
RewriteRule    (.*) app/webroot/$1 [L]
</IfModule>

C:\xampp\htdocs\mynewapp\app.htaccess

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule    ^$ webroot/    [L]
RewriteRule    (.*) webroot/$1 [L]
</IfModule>

C:\xampp\htdocs\mynewapp\app\webroot.htaccess

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /mynewapp/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>

Saya membuat tampilan C:\xampp\htdocs\mynewapp\app\View\Photos\manage.ctp. Pada file ini, saya melakukan panggilan Ajax

$this->Js->sortable(array(
    'complete' => '$.post("/mynewapp/photos/reorder",
        $("#sortableitems").sortable("serialize"))'));

Masalah saya adalah saya harus meletakkan mynewapp di jalur yang diberikan ke $.post agar berfungsi. Saya ingin menulis $.post("/photos/reorder"; ...

Adakah yang tahu bagaimana saya bisa mengatasi ini?


person quokka-web    schedule 17.08.2014    source sumber


Jawaban (1)


Masalah saya adalah saya harus meletakkan aplikasi baru saya di jalur yang diberikan ke $.post

Ini tidak ada hubungannya dengan konfigurasi CakePHP (atau server web) agar berfungsi dengan AJAX - ini masalah logika sederhana. Ada dua cara yang jelas untuk menangani apa yang dijelaskan.

Gunakan perute

Diambil dari pertanyaan, ini adalah kode PHP dari file view:

$this->Js->sortable(array(
    'complete' => '$.post("/mynewapp/photos/reorder",
        $("#sortableitems").sortable("serialize"))'));

Oleh karena itu, cukup kirimkan url melalui router terlebih dahulu:

$url = $this->url('/photos/reorder');

$this->Js->sortable(array(
    'complete' => '$.post("' . $url . '",
        $("#sortableitems").sortable("serialize"))'));

Hal ini sesuai dengan penulisan Js menggunakan helper Js tetapi untuk apa pun selain js yang sepele, Anda mungkin menemukan bahwa helper tersebut tidak Membantu (dalam hal ini - jangan gunakan).

Gunakan variabel js

Alternatifnya, buatlah variabel yang dapat digunakan sebagai url dasar dan awali semua url dengan variabel tersebut. Ada banyak cara untuk melakukannya, salah satunya adalah:

<?php
// default layout file
$app = array(
    'root' => $this->url('/'),
    // add anything else the app's js might need here
);
?>
<html>
    <head>
        ...
        <script>
            var APP = <?= json_encode($app); ?>;
        </script>
    </head>
<body>
    ...

Dan kemudian ubah panggilan js helper menjadi:

$this->Js->sortable(array(
'complete' => '$.post(APP.root + "photos/reorder",
    $("#sortableitems").sortable("serialize"))'));

Atau serupa.

person AD7six    schedule 17.08.2014
comment
Saya sedang belajar CakePHP dan saya tidak begitu paham dengan beberapa perintah tetapi perintah itu datang :-) Sebenarnya, saya menggunakan solusi pertama (router). Saya memodifikasi sedikit solusinya: $url = $this-›Html-›url(array( controller =› photos, action =› reorder )); dan itu bekerja dengan sempurna! Terima kasih atas bantuan Anda! - person quokka-web; 17.08.2014