【问题标题】:How does this javascript work?这个javascript是如何工作的?
【发布时间】:2013-02-05 14:56:05
【问题描述】:

我是 javascript 菜鸟,我不明白为什么会这样:

$().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 时,控制台日志将显示对象,我可以选择一个元素并查看正确的键:值对。任何帮助都会很甜蜜。

【问题讨论】:

  • load(func);load(func()); 之间存在差异。
  • $().load('/my/url/', {my:data, more:data}, jsFunc()); 不应该真正“工作”。您正在立即执行jsFunc 并将返回值(即undefined)作为回调传递给.load

标签: javascript jquery jquery-load jquery-post


【解决方案1】:

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

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

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

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

或函数表达式:

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

【讨论】:

  • 感谢您为我解释这一点。这很有帮助。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    回答我的第二部分:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-02
      • 1970-01-01
      • 2013-09-20
      • 1970-01-01
      • 1970-01-01
      • 2014-04-30
      • 1970-01-01
      • 2019-06-15
      相关资源
      最近更新 更多