【问题标题】:jQuery: Load body of page into variablejQuery:将页面正文加载到变量中
【发布时间】:2011-07-14 15:17:07
【问题描述】:

我正在使用 jQuery 将 PHP 脚本的结果加载到变量中。脚本会传递用户使用 GET 请求键入的内容。我想将脚本吐出的内容放入其<body> 标记中。这是我尝试过的:

JS:

function loader() {
    var typed = $('#i').val(); //get what user typed in
    $.get("script.php", {i: typed}, function(loaded) {dataloaded = loaded;});
    alert($(dataloaded).find('body'))
}

但它只显示[Objec object]。如何获得一个有用的值,它只是加载页面的正文内容?

我知道 PHP 可以工作,我只需要 JS。
脚本echos 类似于1!!2(两个数字用两个感叹号分隔)。

谢谢!

【问题讨论】:

  • dataloaded 的值是多少?

标签: php javascript html ajax


【解决方案1】:

您正在尝试访问 dataloaded,由于 AJAX 调用的异步特性,它可能未分配。访问它的唯一安全位置是在成功回调中。你也可以使用.html() 函数来获取body标签的内容:

function loader() {
    var typed = $('#i').val(); //get what user typed in
    $.get('script.php', { i: typed }, function(loaded) {
        alert($(loaded).find('body').html());
    });
}

另请注意,如果 script.php 只回显 1!!2 而没有 <body> 标记,则它将不起作用。

【讨论】:

  • 这只会显示null。离开.html() 会显示相同的[Object object]。有什么想法吗?
  • @Nathan G.,不知道,而不是使用警报来调试您的 JavaScript 代码,我强烈建议您 FireBug。它将为您提供有关 AJAX 请求的更多信息,并最终帮助您解决问题。
【解决方案2】:

不知道 console.log 打印什么很难说,但试试这些

alert($(dataloaded).find('body').html());

或者

alert($(dataloaded).find('body').text());

【讨论】:

  • .html 只显示null.text() 显示一个空对话框。有什么想法吗?
【解决方案3】:

使用 JSON 类型。我不确定您的 Jquery 脚本是否正确,但正确使用 JSON 可以解决问题。即:

function loader() {
    var typed = $('#i').val(); //get what user typed in
    $.get("script.php", {i: typed}, function(loaded) {dataloaded = loaded;},"json");
    alert($(dataloaded).find('body'))
}

在对 JSON 进行编码后,来自 script.php 的 POST 变量。使用 PHP 的 json_encode() 函数。您需要将变量创建为数组。例如:

<?php 
$title = 'Hello World';
$content = 'Get well soon Japan!';
$arr=array('title'=>$title,'content'=>$content);
echo json_encode($arr);
?>

而 Jquery 会是这样的:

function loader() {
var typed = $('#i').val(); //get what user typed in
$.get("script.php", {i: typed}, function(loaded) {var dataloaded = loaded.title+" "+loaded.content;},"json");
$("body").html(dataloaded);
}

在某些情况下,您可能需要使用 Jquery 的 parseJson() 函数。不要认为你会需要这里。

【讨论】:

  • 好吧,我没有在我的电脑上测试过 Jquery 脚本是否是真的,因为编辑器没有打开并且很快就会睡觉。但我相信 JSON 类型会解决这个问题。你应该在你的 PHP 文件中回显编码数组。
  • @Nathan G. 如果我不理解错误,您想在正文中写入抓取的文本。看看我的更新。
  • @Ahmet 我不想显示检索到的文本,我想将表示检索到的页面正文的部分分配给一个变量进行处理。
  • 然后改变你得到的函数(基于我的示例 php 脚本):function(loaded) {var dataloaded = $.parseJson(loaded.title)+" "+$.parseJson(loaded.content);} 并以你的方式使用它:alert($(dataloaded).find('body').html());
  • 在你的 get 函数上,在 dataloaded 之前添加一个 var 可能会更好。
【解决方案4】:

我将尝试获取的页面更改为 XML。我正在使用$.find 从 XML 页面中单独获取每个感兴趣的元素,这非常适合这个特定的应用程序。

这个问题已经消失,因为不再有 head 部分可以忽略,而且我只是抓取单个 XML 元素。

感谢您的所有时间和帮助!

【讨论】:

    猜你喜欢
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    相关资源
    最近更新 更多