通过ajax将变量从javascript传递给yii

时间:2014-01-17 18:43:06

标签: javascript php ajax yii

我正在写一个Yii应用程序(或者我应该说建立在别人的Yii应用程序之上!)。我需要使用相当多的javascript,因为我正在使用Leaflet地图库。因此,很多内容都是PHP代码的外部代码,并使用registerScriptFileregisterScript等进行调用。

要将数据从javascript导入主Yii应用程序,我一直在使用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作为变量传递机制。

由于

2 个答案:

答案 0 :(得分:1)

这对我来说很正常。 。 。您正在使用renderPartial生成HTML,然后您正在使用AJAX中的回调通过replaceWith将HTML放在您想要的位置。对于你提到你需要整个页面的第二个用例,听起来你想要渲染页面,而不是渲染一个renderPartial。 。 。

我所做的一个改变是在实际的jQuery.ajax()调用中使用成功回调,而不是在1.8中将要删除的jqXHR.success()方法,即:

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

答案 1 :(得分:0)

当我需要用AJAX调用中的html替换整个页面时,这对我有用:

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

到目前为止,我发现的唯一问题是它没有更新网址...

相关问题