jQuery ajax请求和内联javascript

时间:2011-10-17 13:36:58

标签: javascript jquery ajax

Hello Stackoverflow用户,

我有一个页面可以执行AJAX请求来更新购物车。 问题是购物车有一些内联的javascript,它打破了ajax请求的页面。

以下是我使用的ajax请求:

    $.ajax({
        url: "Default.aspx?ID=5&productid=PROD147&cartcmd=add",
        success: function () {
            $.ajax({
                url: "Default.aspx?ID=5",
                dataType: "html",
                cache: false,
                success: function(html){
                    $(html).remove('script');
                    console.log(html);
                    var ajax_shoppingcart = $('#shoppingcart',html).html(); 
                    $('#shoppingcart').html(ajax_shoppingcart);
                    var ajax_basket = $('#topbanner_eshop',html).filter(":not(script)").html(); 
                    $('#topbanner_eshop').html(ajax_basket);
                  }
            });
        }
    });

但问题是它加载到#topbanner_eshop的数据包含一些内联的javascript,它打破了页面。

尝试导入以下html:

<div id="topbanner_eshop">
    <div>
        <div>
            <a href="Default.aspx?ID=24">Shop videre » </a>
        </div>
        <div>
            2 varer i kurven
        </div>
        <div>
            Total
        </div>
        <div>
            <script type="text/javascript"> 
            // var str="190,00"; 
            var str="DKK 190,00"; 
            document.write(str.replace(/,00/, ",-")); 
            </script>
        </div>
    </div>
</div>

但是当它到达内联脚本时,它会用脚本结果替换整个页面。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

嗯,首先,就是这样:

 $(html).remove('script');

您明确删除了脚本元素。

然后,实际的脚本使用“document.write()”,一旦加载了包含页面,它将隐式销毁它。换句话说,调用“document.write()”会隐式调用“document.open()”,而后者会删除DOM。

而不是“document.write()”,你可以这样做:

<span id='amount'></span>
<script>
  var str = "DKK 190,00"; // I presume that's actually a server-side thing
  $('#amount').text(str.replace(/,00/, ',-'));
</script>

用服务器端代码修复字符串会好得多。

答案 1 :(得分:1)

jQuery正常运行。问题出在HTML代码上。在任何页面上调用document.write都会用结果替换页面的全部内容,因此您可能想要使用其他内容。