使用jQuery 1.7.3
我最近在我的一个脚本中用$.load();
替换了$.get();
调用,以利用请求中止和其他很酷的功能 - 所以我要求正常(在这种情况下是php) )html页面而不是返回JSON或XML的文件。
但我注意到你正在加载的页面上出现脚本错误 - 例如onError='myFunction(this);'
内联脚本调用未在第1页上定义但在第2页上出现的函数,可能会抛出错误(在这种情况下,第1页上的undefined function myFunction
)。我也看到了图片的请求。
我的用例是我需要从新页面获取一个div值的数据,而不是整个事物,当然不是图像 - 有没有办法让jQuery只请求标记而不是“跟随”图像链接,也不尝试运行任何内联脚本?
示例:
Page1:
$.get('page2', {someData:123}, function(data){
var myDiv = $('#myDiv', data); //get the div I want from the response
//but at this point the browser has run the inline
//scripts and requested the images :(
//do something with the (very expensive) data
$('body').append(myDiv);
});
Page2:
<div id='myDiv'>
<!-- some dynamic data that changes over time -->
</div>
我是否应该编写(另一个)文件,我可以用JSON查询以获取我需要的数据,然后在脚本中解析它并生成标记等等,这有一些问题,但是在这方面已经足够了用例会比它的价值更麻烦,特别是考虑到我也在复制代码。
关于内联脚本,我可以(并且作为一种解决方法)在第1页上定义函数以避免错误。
任何帮助表示赞赏
答案 0 :(得分:1)
您可以从选择器中排除节点:
var myDiv = $(data).find('#myDiv').find('*').not('img, script');
答案 1 :(得分:1)
您是否曾尝试使用$.ajax()
执行ajax请求并将dataType
设置为text
? http://api.jquery.com/jQuery.ajax/
答案 2 :(得分:0)
我最终找到的最好的方法是非常简单 - 当你向页面发出AJAX请求时,发送一个额外的参数来阻止你的页面输出你不需要的数据。
Page1:
$.get('page2', {someData:123, ajax:true}, function(data){
var myDiv = $('#myDiv', data); //get the div I want from the response
$('body').append(myDiv);
});
Page2:
<?php if (isset($_GET['ajax'])) { ?>
<div id='myDiv'>
<!-- some dynamic data that changes over time -->
</div>
<?php exit(); ?>
<?php } else { ?>
//show the page as normal
<?php } ?>
这种方法很难实现,但是当你有一个非常大的搜索页面可以完成所有类型的额外工作时,它可以完成工作并且很有效率,但是你想要的只是结果的下一页。