【问题标题】:$.GET() didn't return value$.GET() 没有返回值
【发布时间】:2011-11-21 04:25:28
【问题描述】:

我有这样的脚本。

function getContactLastDateOfDeparture(contactId) {
    $.get(
        '/transaction/ajaxGetContactLastDateOfDeparture/'+contactId, 
        '', 
        function(data){
            alert(data);
            return data;
        }, 
        'json'
    );
}

我用console.log(getContactLastDateOfDeparture(2144))测试上面的脚本,在警报阶段它输出字符串2011-12-06,但是当阶段return它输出undefined

如何让return应该是2011-12-06

【问题讨论】:

  • @Alxandr 在问题的具体细节上,我同意这是一样的。但在他不知道解决方案的情况下,我可以看到它看起来不一样。
  • 是的。我主要只是发布它,因为它比再次发布答案要快。我只是认为这可能会有所帮助,因为我在另一个问题中详细解释了这个问题。不想说 hist google-foo 不是最新的或任何东西。
  • 在试图引起我们的注意时,您需要更加具体。你的问题充其量是模糊的!
  • @zequinha-bsb 我认为问题很明确。他给出了一个测试用例,并明确说明问题出在哪里以及是什么。仅仅因为你被否决并不意味着它不是一个有效的问题。

标签: javascript jquery


【解决方案1】:

你不能真正在 AJAX 函数中执行返回,因为它是异步的。如果要传递值,最好在最后调用另一个函数。

为此,您可以像这样传递它:

function getCall(param, callback) {
    $.get('url', function (data) { alert(data); callback(data); }, 'json');
}

【讨论】:

    【解决方案2】:

    如果你真的希望你的函数从 ajax 调用中返回值,你可以使用 $.ajax 而不是 $.get (本质上 $.get 是基于 $.ajax 并带有一些简化的参数); $.ajax 有一个参数“async”,您可以将其设置为 false 以使 ajax 调用同步。

    重要 - 不建议使用 ajax 同步调用,因为它会冻结 js 执行并可能导致意外问题。

    【讨论】:

    • 提到这甚至是一种可能性,就像让孩子玩剑并告诉他要小心。不了解异步工作原理的人不应该知道这种可能性,这对他们来说似乎很容易解决,而他们真正需要的是掌握事件驱动编程的工作原理并重新构造他们的代码以适应这种情况模型。在单线程环境中执行同步操作是完全错误的。
    • 我同意,我绝不会建议任何人这样做,因此附注。我只是直接回答了这个问题。
    【解决方案3】:

    http://fixingthesejquery.com/images/ajax101.png

    您应该阅读有关 Ajax、异步行为和事件驱动编程的知识。它只是不能那样工作。

    【讨论】:

      【解决方案4】:

      格斯,

      第一个参数是指向有效处理页面(html、asp、php 等)的 url。

      编辑(被否决后):

      在您的情况下,一个有效的网址是:

      $.get('url', function (data) {
          alert(data);
      });
      

      你的 url '/transaction/ajaxGetContactLastDateOfDeparture/'+contactId 不是“计算”

      然而,

      '/transaction/ajaxGetContactLastDateOfDeparture/getContactID.php?contactID='+contactId
      

      会的!

      然后,您的处理文件(.asp、.php 等)将返回您的值 期待。

      【讨论】:

      • 它是有效的 url,AJAX 是有效的。它不仅仅是返回值。请看我上面的问题。
      • No Gus,它不是一个有效的 url。 url 由文件扩展名(.html、.asp、.php 等)终止。在这种情况下,你想让我们相信你的参数“contactId”是一个文件名吗?我将编辑我的答案,以便您理解我的意思;即使 Ktash 指出了我的同样的事情。
      • @zequinha-bsb 这可能是一个完全有效的 URL,原因有很多。首先,它可能是一个使用默认页面的目录。其次,它可能使用重定向来重定向到页面。最后,它可能是一个没有扩展名的文件,服务器知道如何处理和服务。 URL 在这里并不是真正的问题。
      • @zequinha-bsb URL 100% 有效。您不需要 .php.html 或任何东西来获得有效 URL。事实上,如果你没有这样的疯狂网址,SEO 优化会更好。见:stackoverflow.com/questions/4504169/seo-friendly-urls-htaccess
      • @zequinha-bsb 冷静一下。给出的代码中列出的示例将产生以下内容:/transaction/ajaxGetContactLastDateOfDeparture/2144。此 URL 完全有效。我一直使用这样的 URL。任何 Wordpress 博客也是如此。事实上,StackOverflow 也是如此。立即查看 URL 栏中的 URL。您会注意到它不会以.php.aspx 结尾,我可以向您保证,他们不会在每次有人提出问题时创建新目录。或发布答案。像这样的 URL 无处不在,对用户和 SEO 更友好。我建议学习使用它们。
      猜你喜欢
      • 2013-10-31
      • 1970-01-01
      • 2021-08-13
      • 2013-06-24
      • 1970-01-01
      • 1970-01-01
      • 2017-12-17
      • 2016-12-12
      • 2017-02-28
      相关资源
      最近更新 更多