จะกำหนดค่า CakePHP 2.5.x ให้ทำงานกับ Ajax ได้อย่างไร

ฉันกำลังทำงานกับ localhost ด้วย xampp ฉันติดตั้งแอปพลิเคชัน cakePHP บน C:\xampp\htdocs\mynewapp\ ดังนั้นฉันจึงสามารถเข้าถึงเว็บไซต์ CakePHP ของฉันได้ทาง

http://localhost/mynewapp

ฉันสามารถเข้าถึงหน้าของฉันทั้งหมด มันทำงานได้อย่างสมบูรณ์แบบ แต่ฉันพบปัญหาบางอย่างจากการโทร Ajax

นี่คือการกำหนดค่า .htaccess ของฉัน: 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>

ฉันสร้างมุมมอง C:\xampp\htdocs\mynewapp\app\View\Photos\manage.ctp ในไฟล์นี้ ฉันโทรผ่าน Ajax

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

ปัญหาของฉันคือฉันต้องใส่ mynewapp ในเส้นทางที่กำหนดให้กับ $.post เพื่อให้มันใช้งานได้ ฉันต้องการเขียน $.post("/photos/reorder"; ...

มีความคิดใดที่ฉันจะแก้ไขปัญหานี้ได้อย่างไร


person quokka-web    schedule 17.08.2014    source แหล่งที่มา


คำตอบ (1)


ปัญหาของฉันคือฉันต้องใส่ mynewapp ในเส้นทางที่กำหนดให้กับ $.post

สิ่งนี้ไม่เกี่ยวข้องกับการกำหนดค่า CakePHP (หรือเว็บเซิร์ฟเวอร์) ให้ทำงานกับ AJAX - มันเป็นปัญหาตรรกะง่ายๆ มีสองวิธีที่ชัดเจนในการจัดการกับสิ่งที่อธิบาย

ใช้เราเตอร์

จากคำถาม นี่คือโค้ด PHP จากไฟล์ดู:

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

ดังนั้น ให้ส่ง url ผ่านเราเตอร์ก่อนแทน:

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

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

สิ่งนี้สอดคล้องกับการเขียน Js โดยใช้ตัวช่วย Js แต่สำหรับสิ่งอื่นใดที่นอกเหนือจาก js เล็กน้อย คุณอาจพบว่าตัวช่วยนั้นไม่ช่วย (ในกรณีนี้ - อย่าใช้มัน)

ใช้ตัวแปร js

หรือสร้างตัวแปรที่สามารถใช้เป็น URL ฐานและนำหน้า URL ทั้งหมดด้วยค่านั้น มีหลายวิธีในการทำเช่นนั้น วิธีหนึ่งคือ:

<?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>
    ...

จากนั้นแก้ไขการเรียกตัวช่วย js ให้เป็น:

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

หรือคล้ายกัน.

person AD7six    schedule 17.08.2014
comment
ฉันกำลังเรียนรู้ CakePHP และฉันไม่คุ้นเคยกับคำสั่งบางคำสั่งมากนัก แต่กำลังจะมา :-) จริงๆ แล้ว ฉันใช้วิธีแรก (เราเตอร์) ฉันแก้ไขวิธีแก้ปัญหาเล็กน้อย: $url = $this-›Html-›url(array( controller =› photos, action =› reorder )); และมันทำงานได้อย่างสมบูรณ์แบบ! ขอบคุณสำหรับความช่วยเหลือของคุณ! - person quokka-web; 17.08.2014