Jquery load()一个包含JavaScript的html文件

时间:2011-04-14 18:56:38

标签: php javascript jquery

我有一个很大的困境。我想加载一个包含javascript(谷歌地图)代码的.html文件来渲染其中的div。

maps.html看起来像这样:

    <script type="text/javascript">
function getUrlVars()
{
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');

    for(var i = 0; i < hashes.length; i++)
    {
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1];
    }

    return vars;
}
</script>

    <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
    <script type="text/javascript">
    //<![CDATA[




var hash = getUrlVars();

    function load() {
      var map = new google.maps.Map(document.getElementById("map"), {
        center: new google.maps.LatLng(hash['lat'],hash['lng']),
        zoom: 14,
        mapTypeId: 'roadmap'
      });
      var infoWindow = new google.maps.InfoWindow;


      downloadUrl("xmlout_carol.php", function(data) {
        var xml = data.responseXML;
        var markers = xml.documentElement.getElementsByTagName("marker");
        for (var i = 0; i < markers.length+1; i++) {
          var name = markers[i].getAttribute("nume");
          var address = markers[i].getAttribute("adresa");
          var type = markers[i].getAttribute("id");
          var point = new google.maps.LatLng(
              parseFloat(markers[i].getAttribute("lat")),
              parseFloat(markers[i].getAttribute("lng")));
          var html = "<font face='Tahoma' style='font-size:12px;'><div style='min-width:230px;'><b>" + name + "</b> <br/>" + address +"<a target='_top'  href='../statii.php?id=" + type + "'><img style='float:right; border:0px; margin-left: 40px;'  src='go.png' /></a><div/></font>";
          var tip = markers[i].getAttribute("tip");
          var icon = customIcons[tip] || {};

          var marker = new google.maps.Marker({
            map: map,
            position: point,
            icon: icon.icon,
           // shadow: 'shaddow.png'
          //shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png'
          });
          bindInfoWindow(marker, map, infoWindow, html);
        }
      });
    }

    function bindInfoWindow(marker, map, infoWindow, html) {
      google.maps.event.addListener(marker, 'mouseover', function() {
        infoWindow.setContent(html);
        infoWindow.open(map, marker);
      });
      google.maps.event.addListener(map, 'click', function() {
        infoWindow.close(map, marker);
      });
    }

    function downloadUrl(url, callback) {
      var request = window.ActiveXObject ?
          new ActiveXObject('Microsoft.XMLHTTP') :
          new XMLHttpRequest;

      request.onreadystatechange = function() {
        if (request.readyState == 4) {
          request.onreadystatechange = doNothing;
          callback(request, request.status);
        }
      };

      request.open('GET', url, true);
      request.send(null);
    }

    function doNothing() {}

    //]]>

  </script>

  <body onload="load()">
    <div id="map" style="width: 900px; height: 500px"></div>
  </body>

此脚本将地图呈现给div.map

我想要做的是将此.html加载到另一个.php文件中包含的div中,如下所示:

$("div#insert_here").load("maps.html?lat=xxx&long=yyy");

它输出maps.html中包含的div但没有map没有java。

所以问题是......如果.html文件已包含javascripts以将数据输出到{{1},如何在另一个.php文件中使用jquery加载.html文件在div文件???

非常感谢!

3 个答案:

答案 0 :(得分:1)

除了加载同时包含HTML和JavaScript的文件外,您是否可以首先加载带有页面的JavaScript,对HTML进行ajax调用,并在ajax请求完成后调用JavaScript?这将解决许多令人头疼的问题。

答案 1 :(得分:1)

正如其他人所说,特别是加载JS,或者执行eval()函数;)。

解析JS并使其最初可以执行。

答案 2 :(得分:0)

我不使用load并且使用$ .ajax或$ .post似乎总是更好(更灵活,我还建议调用json并使用dataType:“json”。再次更灵活)。

成功运行回调以在将ajaxed html加载到页面后运行所需的javascript。您调用use beforeSend来加载您需要的脚本(尽管除非有充分的理由将这些脚本与其他所有内容一起添加到页面中(更健壮/可缓存))。

如果google_statii.js需要动态变量,则一种方法是使用页面上的隐藏输入,并在服务器端填充值,然后在脚本中调用它们。

即。 var x = $(“input#myHiddenVariable”);