jQuery将内容加载到变量中

21
我需要将 jQuery load 的结果插入到变量中。
在 ajax.html 页面上,元素 id 为 test 的内容。
$('#result').load('ajax.html #test');
9个回答

28

尝试使用jQuery.get替代。

例如:

$.get('ajax.html', function (data) {
    data = $(data).find('#test');
    // data contains your html
});

11
$('#result').load('ajax.html #test', function(result) {
    var variable = $('#result').html();
});

这看起来是个合理的方法,但是这将会在回调作用域中设置一个变量.. 这并没有太大的帮助。 - Jamie Wong
2
@Jamie Wong,众所周知,AJAX调用的结果只能在回调函数中使用,因此在成功回调函数之外设置该变量的值将毫无意义。 - Darin Dimitrov
1
@Jamie:所以,在全局范围内设置一个变量,或者其他什么。 - gen_Eric
@Darin,你的方法看起来有些不专业。虽然它比使用普通的AJAX请求并自己搜索#test内容的代码要少,但它会对#result进行不必要的加载。 - Alin Purcaru
3
@Alin Purcaru,为什么不必要?我认为 OP 的意图是将 AJAX 调用的结果加载到 #result 中,并将其分配给一个变量。如果不是这样的话,显然使用 $.ajax() 会更好。 - Darin Dimitrov
@Darin 我猜这只能由他回答。我们都有不同的假设 - Alin Purcaru

11

大体上与上述做法相同,但更简单:

var dt;
    $.get("ajax.html", function (data) {
        dt = data;
        // data contains your html
    });

1
这个答案在我看来似乎是最好的。请也看一下这个代码片段:https://gist.github.com/geilt/817ff32b20414ddd5a16 - Redips77

7
$(document).ready(function(){
    $('#result').load('/ p#name', function(result) {
        var obj = $(this).find('p#name'), html = obj.html();
        obj.css({'font-size':40});
        $(this).append($('<div>').text(html));
    });
});

JSFiddle上的示例http://jsfiddle.net/kuroir/stD94/


5
我在所有询问如何将 jQuery ajax 方法中的数据塞入变量而不是 HTML 元素的 stackoverflow 帖子上发布这条消息,因为我很难找到一个可行的解决方案。最终我找到了一个解决方案,并希望与任何遇到困难的人分享。
我的问题在于,我很难在 "document.ready" 事件阶段将 jQuery ajax 的结果存储到我的变量中。
我的测试表明,当用户在页面加载后触发 select 框的 "onchange" 事件时,jQuery 的 ajax 会加载到我的变量中,但是数据在页面首次加载时不会填充到变量中。但我不想在我的 "onchange" 事件上触发任何 ajax;我希望 变量 在页面加载时就通过 ajax 数据处理工作。当用户触发 "onchange" 事件时,变量 用于动态更改数据。这样,在用户与表单交互时就没有延迟/ajax,一旦页面加载,数据就可用。
我尝试了许多不同的方法,但最终我需要的代码在这个stackoverflow线程中:JQuery - 将ajax响应存储到全局变量中 我使用了Charles Guilbert的响应。使用他的答案,即使我的页面首次加载时,我也能将数据存入我的变量中。
以下是一个工作脚本的示例 - 希望能帮助到某些人!
jQuery.extend
(
    {
        getValues: function(url) 
        {
            var result = null;
            $.ajax(
                {
                    url: url,
                    type: 'get',
                    dataType: 'html',
                    async: false,
                    cache: false,
                    success: function(data) 
                    {
                        result = data;
                    }
                }
            );
           return result;
        }
    }
);

// Option List 1, when "Cats" is selected elsewhere
optList1_Cats += $.getValues("/MyData.aspx?iListNum=1&sVal=cats");

// Option List 1, when "Dogs" is selected elsewhere
optList1_Dogs += $.getValues("/MyData.aspx?iListNum=1&sVal=dogs");

// Option List 2, when "Cats" is selected elsewhere
optList2_Cats += $.getValues("/MyData.aspx?iListNum=2&sVal=cats");

// Option List 2, when "Dogs" is selected elsewhere
optList2_Dogs += $.getValues("/MyData.aspx?iListNum=2&sVal=dogs");

3
尝试使用$.ajax$.load只是一个快捷方式。

2

如果您想要精确加载函数,请尝试以下方法:

var temp;
$(new Object()).load('YourUrl', { param: "smth" }, function(data){
  $('#element').prepend(data); //if you want prepend/append result to some html
  temp = data; //if you want put to variable
});

1
$('#submit').click(function(){ var taval = $("#message").val();
$("#showcomment").load('comments.php', {commentval:taval}) });

1
你需要为你的回答添加上下文。 - JoshDM

0

使用 setTimeout

<script> 
    my_var=$('#hidden').load('new.html');
    setTimeout(function(){
        my_var=my_var.html();
        alert(my_var);
    }, 500);
</script>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接