如何将PHP模板添加到动态生成的Javascript代码中

时间:2013-07-29 13:48:49

标签: php javascript codeigniter

我正在使用Code Igniter和Googlemaps库。该库动态生成大量Javascript代码,包括每个新标记的InfoWindows内容,但我想将其保存在单独的模板文件中,如常规视图。

我有这个Javascript代码(来自Googlemaps的库):

        var lat = marker.getPosition().lat();
        var long = marker.getPosition().lng();

        var windowContent = "";

        if( _new ) {
            var newIW = new google.maps.InfoWindow( { content: windowContent } );

我想要做的是从模板文件加载windowContent。我已成功动态生成此变量的表单并使用上面定义的latlong变量,但如何在Code Igniter中实现此目的?我无法使用load->view,因为我不在Controller的上下文中。由于CI的安全限制,我无法使用include()readfile()

任何提示?

1 个答案:

答案 0 :(得分:2)

使用纯javascript,获取lat和long,在查询字符串中使用lat和long创建一个url,并使用xhr执行ajax调用。

var lat = marker.getPosition().lat();
var long = marker.getPosition().lng();

var xhr;
var url = "http://myurl.to/script.php?lat="+lat+"&lng="+long;
if(typeof XMLHttpRequest !== 'undefined') 
    xhr = new XMLHttpRequest();
else {
    //Get IE XHR object
    var versions = ["MSXML2.XmlHttp.5.0", 
            "MSXML2.XmlHttp.4.0",
            "MSXML2.XmlHttp.3.0", 
            "MSXML2.XmlHttp.2.0",
            "Microsoft.XmlHttp"];

    for(var i = 0, len = versions.length; i < len; i++) {
        try {
            xhr = new ActiveXObject(versions[i]);
            break;
        }
        catch(e){}
    }
}
xhr.onreadystatechange = function(){
    //This function is called every so often with status updates
    //It is complete when status is 200 and readystate is 4

    if(xhr.status == 200 && xhr.readyState === 4) {  
        //Returned data from the script is in xhr.responseText
            var windowContent = xhr.responseText;

            //Create the info window
            var newIW = new google.maps.InfoWindow( { content: windowContent } );

            //Pass newIW to whatever other function to use it somewhere
    }
};

xhr.open('GET', url, true);
xhr.send();

如果使用像jQuery这样的库,那就像

var lat = marker.getPosition().lat();
var long = marker.getPosition().lng();
var url = "http://myurl.to/script.php";
jQuery.ajax({
   "url":url,
   "data":{ //Get and Post data variables get put here
      "lat":lat,
      "lng":long
   },
   "dataType":"html", //The type of document you are getting, assuming html
                      //Could be json xml etc
   "success":function(data) { //This is the callback when ajax is done and successful
      //Returned data from the script is in data
      var windowContent = data;

      //Create the info window
      var newIW = new google.maps.InfoWindow( { content: windowContent } );

      //Pass newIW to whatever other function to use it somewhere
   }
});