这个javascript是如何工作的?

时间:2013-02-05 14:56:06

标签: javascript jquery jquery-load jquery-post

我是一个javascript noob,我不明白为什么会这样:

$().load('/my/url/', {my:data, more:data}, jsFunc());

function jsFunc()
{
    $("#myid").val("yep");
}

但不是这样:

$().load('/my/url/', {my:data, more:data}, function() {jsFunc()});

function jsFunc()
{
    $("#myid").val("yep");
}

我尝试了$ .ajax而不是$ .load,结果相同。我将响应数据传递给jsFunc(),这就是为什么我需要函数内部的jsFunc()。我确信它很简单我只是对javascript没有经验。谢谢。

再次感谢所有帮助。我决定使用$ .post,因为它最适合这种情况但现在我遇到了响应数据的问题。我的代码如下所示:

$.post('/my/url/', {my:data, more:data}, function(data) {
    var strung = JSON.stringify(data)
    var parse = jQuery.parseJSON(strung)
    console.log(parse.some);}, 'json');

我正在登录到控制台以查看现在要回来的内容,当我看到正确的值记录时,我将添加回调。我从jQuery api页面获得的过程,但它只会记录undefined。当我将parse.some更改为parse时,控制台日志将显示对象,我可以选择一个元素并查看正确的键:值对。任何帮助都会很好。

3 个答案:

答案 0 :(得分:4)

两者都不起作用。第一个似乎有效,因为您立即调用函数jsFunc,它不会等待任何响应。

如果使用$()创建一个空的jQuery对象并对其使用load方法,它将不会调用服务器,因为它没有可以放置结果的元素。

要指定回调函数,您可以使用函数名称:

$('#someElement').load('/my/url/', {my:data, more:data}, jsFunc);

或函数表达式:

$('#someElement').load('/my/url/', {my:data, more:data}, function() { jsFunc(); });

答案 1 :(得分:0)

第一个代码块将简单地调用jsFunc()并将结果作为参数返回到load(..)方法,这是奇怪的,因为该参数应该是在加载完成时触发的回调函数,但是这样可行?回调语法更符合第二个例子(我相信你说的那个不起作用)。

答案 2 :(得分:0)

回答我的第二部分:

我返回的JSON数据由许多对象组成,因此我必须指定索引和键来获取要返回的值。