環境: 的Windows 8 的Apache 2.4 ZF 1.12 PHP 5.4 YUI在幕後的連接到服務器框架Zend框架1.12,ContextSwitch裏或AjaxContext沒有禁用佈局等問題
我試圖在用戶與之交互來進行一個非常簡單的AJAX/JS組合:
2 of 4 people found this review helpful. Was this review helpful to you? Yes No
當用戶點擊或者是/否的4 2應通過AJAX/JS更新。我在ReviewController的init()方法中有以下代碼(擴展Zend_Controller_Action)。你要知道,下面這個動作視圖腳本(feedbackAction)是/views/scripts/review/feedback.json.phtml
$ajaxContext = $this->_helper->getHelper('AjaxContext');
$ajaxContext->addActionContext('feedback', 'json')
->initContext();
當feedbackAction執行異常跳出來聲稱它找不到feedback.phtml 。這告訴我,AjaxContext實際上不是附加「json」格式。這是爲什麼發生? 我在某處讀到應該在動作中調用initContext()。我試過了......同樣的例外。
然後我嘗試使用ContextSwitch,但它似乎擊敗了讓AjaxContext成爲ContextSwitch的子類的目的。在ReviewController在init()的代碼由被替換:
$contextSwitch = $this->_helper->getHelper('contextSwitch');
$contextSwitch->addActionContext('feedback', 'json')
->initContext();
這個時候,莫名其妙地,不發生異常,而是顯示以下內容:頭部代碼(由我_header.phtml文件生成一個名爲由我的layout.phtml文件)。我根本不懂。我明白(顯然不是很好),如果啓用了任何「addActionContext」+ initContext()DISABLED佈局。 ¿?
編輯 我想通了,它wasn't HTML內容構成了我_header.phtml文件,但是從已被渲染,因爲有些動作我已經加入到我的動作堆棧另一個一個.phtml文件。一旦這種被照顧的,什麼是呈現如下:
{"originalModule":"default","originalController":"review","originalAction":"feedback","result":true,"id":1,"helpful_yes":"3","helpful_total":"4"}
這是擺在$這個 - >查看變量被呈現爲JSON的感謝在的init()方法發起ContextSwitch助手我ReviewController()。當我說「這是百」時,是因爲我在地址欄中放置了以下url:http://localhost/PlacesforKids/public/review/feedback/format/json/id/1/helpful/1
據說這是YUI框架發送的URL。
我說「應該是」,因爲在我的javascript成功函數中(在成功執行ajax調用時被YUI框架調用回來)我做fownling:alert(response),打印出我得到的響應...它打印出整個shabang:html標籤,標題等等。我不知道這是怎麼可能的。
我想那時我可能會濫用YUI框架,所以我試圖改用jquery.js。爲此,我將this的版本複製到名爲jquery.js的文件中,並將其放在我的/ public/js目錄下。這裏是阿賈克斯稱之爲製作服務器:
$.ajax({
url: sUrl,//that would be
//localhost/PlacesforKids/public/review/feedback/format/json/id/$id/helpful/$helpful
type: "GET",
async: false,
success: function(response){
alert(response);
}
});
這裏是HILARIOUS部分,我的ReviewController的動作不被稱爲任何東西。相反,最後呈現的視圖會重新呈現,這意味着它重新發送由最後一個操作(屬於與ReviewController不同的控制器)所調用的視圖腳本生成的內容。我知道it's被重新呈現,因爲that's該視圖腳本的所有者我添加了這個動作:
if($this->getRequest()->getQuery('ajax') == 1)
throw new Exception ("WRONG controller's action being called");
但它永遠不會拋出異常。
編輯我想我得到它,但我需要知道如何清潔的baseUrl() 於是我打開了Java控制檯上我的chrome瀏覽器,所以我可以查找實際的HTTP請求,我reviewFeedback.js通過$ .ajax()方法制作。有趣的事情,這就是我的了:
Request URL:http://localhost/PlacesforKids/public/place/index/id/localhost/PlaceforKids/public/review/feedback/format/json/id/1/helpful/0
Request Method:GET
Status Code:200 OK
Accept:*/*
Referer:http://localhost/PlacesforKids/public/place/index/id/1
X-Requested-With:XMLHttpRequest
爲什麼在世界上是$阿賈克斯()附加的URL我爲GET現有的網址是什麼?這意味着無論我想通過我的$ .ajax()生成的url是gettign APPENDED給我的「引用者」。所以,我只需要清理它,並從零開始,因爲我的意思是...我怎麼能在zend框架中做到這一點?有任何想法嗎?
現在,如果我將sUrl(localhost/PlaceforKids/public/review/feedback/format/json/id/1/helpful/0)中的字符串直接輸入到我的瀏覽器的地址欄中,要做的是,打印已由ReviewController設置的$ this-> view中的變量,並將它們作爲json發送。
{"originalModule":"default","originalController":"review","originalAction":"feedback","result":true,"id":1,"helpful_yes":"3","helpful_total":"4"}
與YUI框架相同的問題。我要瘋了。
我真的可以使用幫助,謝謝。
我更改了$ .ajax({...})中的代碼;以異步方式:如您所說的那樣。沒有改變。 – Chayemor