2010-07-28 35 views
5

Tôi đang sử dụng ajax với jQuery trong ứng dụng CakePHP của mình.
và chức năng javascript của tôi được đặt bên trong tệp javascript.thực hành tốt nhất để sử dụng url hành động trong khi gọi ajax trong cakePHP

bây giờ trong hệ thống nội bộ các tập tin được lưu giữ trong "/ mẫu" thư mục để các con đường trong khi tôi gọi hàm sẽ

trong ajax.js

$.post({url : "/sample/controller/action"}) 

nhưng sau khi lưu trữ nó url sẽ trở thành

$.post({url : "/mydomain.com/controller/action"}) 

trong CakePHP chúng tôi $html->url để tạo ra các url
nhưng kể từ khi mã này là trong tập tin js i ca không sử dụng chức năng mà

tôi không muốn thay đổi tất cả các url hành động ajax thủ công trước khi lưu trữ

Trả lời

23

Phải làm gì được trong mẫu tổng thể của bạn cho ứng dụng bánh của bạn tạo ra một toàn cầu biến javascript có thể được sử dụng trong suốt ứng dụng của bạn. Hãy chắc chắn rằng nó tồn tại befor bạn làm bất kỳ JS bao gồm quá.

<head> 
    ... 
    <script type="text/javascript">var myBaseUrl = '<?php echo $html->url; ?>';</script> 
    ... 
    <script type="text/javascript" src="mycustomJSfile.js"> 
    ... 
</head> 

Bây giờ bạn có thể thực hiện những việc như thế này từ bất kỳ tệp xem nào bạn có trong ứng dụng khung MVC của mình.

$.post({url: myBaseUrl + 'controller/action'}); 
+0

Tôi làm điều này cho mọi ứng dụng web tôi viết bằng mọi khung công tác. Nó thậm chí còn tiện dụng hơn nếu bạn đang sử dụng Smarty và cần baseUrl trong javascript. Bạn sẽ phải thực hiện {/ literal} {$ baseUrl} {/ literal} là một PITA hoàng gia. Các giải pháp trên giải quyết điều này độc đáo. –

+5

Đây là câu trả lời đúng nhưng nó không hiệu quả với tôi.Có thể là vì tôi đang sử dụng Bánh 2 và giải pháp này là dành cho phiên bản cũ hơn. Tuy nhiên, mã tôi đã sử dụng để làm cho nó hoạt động trong Cake2 là ' ' – Joseph

+0

Và với CakePHP 3, tôi đã sử dụng' var appBaseUrl = ' Url-> build ('/', true); ?> '; ' – XerXes

1

trả lời Paul Dragoonis bạn có thể sử dụng $this->webroot nếu bạn sử dụng thư mục con.

6

Tôi đang cập nhật câu trả lời của Paul Dragoonis để phản ánh phiên bản CakePHP mới nhất (2.2).

Trong tệp bố cục của bạn, hãy đặt biến JavaScript với JSHelper của CakePHP: <?php echo $this->Js->set('url', $this->request->base); ?>, trong đó $this->request là phiên bản của CakeRequest và cung cấp thông tin về yêu cầu hiện tại.

Sau dòng trên, viết bộ đệm với <?php echo $this->Js->writeBuffer(); ?>.

Sau đó, bạn có thể truy cập biến này bằng JavaScript với app.url.

1

sử dụng

echo Router::url(array('controller' => 'Users', 'action' => 'all')); 

Will đầu ra;

/Users/all 

trong js

$.post({url : "<?php echo Router::url(array('controller' => 'Users', 'action' => 'all')); ?>"}) 
3

@irtiza câu trả lời của bạn được đánh giá cao nhưng đối với CakePHP phiên bản mới nhất 3.x này sẽ làm việc nếu không bạn sẽ nhận được lỗi định tuyến.

ulr:'<?php echo \Cake\Routing\Router::url(array('controller' => 
'controllername', 'action' => 'actionname')); ?>' 
Các vấn đề liên quan