1

我正在使用 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,因为我不在控制器的上下文中。而且我不能使用include()或者readfile()因为 CI 的安全限制。

有什么提示吗?

4

1 回答 1

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
   }
});
于 2013-07-29T14:28:18.540 回答