2014-01-17 87 views
0

我正在編寫一個Yii應用程序(或者我應該說建立在別人的Yii應用程序之上!)。我需要使用相當多的JavaScript,因爲我使用的是Leaflet地圖庫。所以很多這是外部的PHP代碼和registerScriptFileregisterScript將變量從javascript傳遞給yii通過ajax

要調用的數據從主要Yii應用程序的JavaScript,我一直在使用AJAX調用。

$.ajax({ 
    type: "POST", 
    url: "xxx/index.php/site/updateajax", 
    data: {recordID: feature.properties.id} 
}).success(function(result){ 
    $("#recordTable").replaceWith(result); 
}); 

public function actionUpdateAjax() 
{ 
    $data = $_POST['recordID']; 
    $this->renderPartial('/map/_legend_layers', array('data' => $data),false,false); 
} 
在php

。我發現我需要調用$("#element").replaceWith(result);,因爲否則渲染會返回但不會呈現。

在這種情況下,這工作正常,因爲我可以調用replaceWith,但我有一個嘮叨的感覺,這不是正確的方式來做到這一點,也有另一個AJAX調用呈現整個頁面,所以我不能真的取代了。

我的問題是如何強制這些AJAX調用返回的HTML來呈現頁面,或者更可能我想,我怎樣才能使用AJAX來更新變量,返回成功代碼或什麼的,然後讓yii代碼繼續並做它的事情 - 我只使用AJAX作爲變量傳遞機制。

謝謝

回答

1

這對我來說很正常。 。 。您正在使用renderPartial生成HTML,然後您在AJAX中使用回調函數通過replaceWith將該HTML放到您想要的位置。對於你提到你想要整個頁面的第二個用例,這聽起來像你想渲染頁面,而不是render renderpart。 。 。

的一個變化我想提出的是,在實際jQuery.ajax()呼叫使用成功回調,而不是那將會在1.8至被deprectated的jqXHR.success()方法,即:

$.ajax({ 
    type: "POST", 
    url: "xxx/index.php/site/updateajax", 
    data: {recordID: feature.properties.id}, 
    success: function(result){ $("#recordTable").replaceWith(result); } 
}); 
+0

謝謝,根據你的回答添加了對我有用的答案 –

0

這工作對我來說,當我需要從一個AJAX調用替換與HTML整個頁面:

$.ajax({ 
type: "POST", 
url: "xxx", 
success: function(result){ 
document.open(); 
document.write(result); 
document.close(); 
}); 

我迄今發現的是,它不更新URL唯一的問題...

+0

正如我在我的回答中提到的,如果你想重定向到一個全新的頁面而不是動態更新頁面,你可能需要改變呼叫在PHP中從'renderPartial()'到[render()](http://www.yiiframework.com/doc/api/1.1/CController#render-detail)。您將可以跳過javascript成功功能,因爲Yii將重定向到新頁面。你會希望'$ return'參數成爲默認的false。 。 。 – ernie

+0

我可能在這裏錯過了一些東西,但這就是我正在做的事情,我可以看到在我的調試控制檯的「網絡」選項卡中呈現的響應,但不能在頁面本身中顯示。我似乎無法向Yii發出請求,Yii收回控制權。確切的命令是\t \t $這 - >呈現( '創建',陣列( \t \t \t '模式'=> $項目,假 \t \t)); –

+0

哦,我應該提到,在第二種情況下,您只需直接調用操作(可能在表單本身中),而不是使用ajax調用,因爲您不想執行任何操作async – ernie