【问题标题】:No variables defined in jQuery ajaxjQuery ajax 中没有定义变量
【发布时间】:2021-06-04 20:48:24
【问题描述】:

我通常使用 javascript ajax,一切正常,但 wordpress 需要我不熟悉的 jquery ajax。

为什么下面代码中描述的变量没有定义?


var option = "'USER_ID': 'my id is 32',"
var note = "'this is my first note'";

    jQuery(document).ready(function($) {

        var data = {
            'action': 'my_action',
             option   //this does not work. <--- WHAT DO YOU MEAN DOES NOT WORK?
            'USER_NOTE': note  //this does not work. <--- WHAT DO YOU MEAN DOES NOT WORK?
            
        };

        // since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php
        jQuery.post(ajaxurl, data, function(response) {
            alert('Got this from the server: ' + response);
        });
    });


【问题讨论】:

  • 您好,您可以显示divsname html 吗?
  • var divsname = document.getElementById("userid");
  • divsname 是 id 吗?那么为什么需要使用 forEach 呢?
  • 那部分不重要,随便放,问题是我不能在data ajax里面放任何变量来发送
  • var divsname = document.getElementById("userid").getAttribute("class");

标签: jquery ajax variables foreach send


【解决方案1】:

将其定义为一个函数,并将其包装在一个闭包中,并传入上下文。

var option = "'USER_ID': 'my id is 32',"
var note = "this is my first note";
const process = (function() {
  const data = {
    'action': 'my_action',
    option
    'USER_NOTE': note
  }
  jQuery.post(ajaxurl, data, function(response) {
    alert('Got this from the server: ' + response);
  });
})(option, note)

jQuery(document).ready(process);

【讨论】:

    【解决方案2】:

    或者,只需将所有内容移到 jQuery.ready 中

    
      jQuery(document).ready(function($) {
        
        var option = "'USER_ID': 'my id is 32',"
        var note = "this is my first note";
    
        var data = {
            'action': 'my_action',
            option,                    
            'USER_NOTE': note           
            
        };
    
        jQuery.post(ajaxurl, data, function(response) {
            alert('Got this from the server: ' + response);
        });
      });
    
    

    【讨论】:

    • 我的作品没有一个例子,让我们忘记每个。如何将 user_id 变量插入数据中,就好像每个都不存在一样?
    • 你英语不好。我不知道你的意思。我建议您创建一个 jsFiddle 或 CodePen 示例来说明您正在尝试做的事情,这样更容易提供帮助。如果您不得不在 cmets 中说“忘记 x、y 或 z”,这不是一个很好的问题。你需要简化。目前,您正试图在一个问题中提出几个问题,但您一无所获。您的问题甚至没有意义“在 jQuery Ajax 的数据中插入每个变量的最佳方法是什么”——这并不意味着什么。没有“for Each variable”之类的东西,你说忽略它
    • 问题已经完全修改了,我们一步一步来吧(希望不违反本站规则)
    • 好的。我已经更新了我的答案以匹配您的问题。这两个答案仍然适用。你真的尝试过我的建议吗?
    • 我试过了,但还是没有发送任何东西,我试试 Flash Thunder 代码,我会告诉你的
    【解决方案3】:

    这是因为您的 data json 对象未正确定义。您需要将选项定义更改为有效的 json 对象:

    var option = "'USER_ID': 'my id is 32',"
    

    var option = {'USER_ID': 'my id is 32'}
    

    并以不同的方式添加它,以便正确合并:

    var data = {
            'action': 'my_action',
            ...option,                    
            'USER_NOTE': note           
            
        };
    

    这应该可以解决您的问题。

    【讨论】:

    • 这并不能直接回答所提出的问题,但它很可能是 OP 实际问题的解决方案。
    • 好的,现在正在发送,但我没有收到任何值 USER_ID 为空,为什么?
    • 即使您是这样定义它的? {'USER_ID': 'my id is 32'} ?它是空的还是未定义的?响应究竟包含什么?使用console.log(response) 而不是警报。并在浏览器开发者工具中检查。
    【解决方案4】:

    这是一个包含您问题的代码笔:https://codepen.io/geoidesic/pen/wvoEdeN

    代码如下:

    var option = "'USER_ID': 'my id is 32',";
    var USER_ID = 'my id is 32';
    var note = "'this is my first note'";
    
    
    jQuery(document).ready(function($) {
      console.log(option); // proves that option is in scope
      console.log(note); // proves that option is in scope
      var data = {
                'action': 'my_action',
                 USER_ID,
                'USER_NOTE': note
            };
      console.log(data); // proves that data is working
    
      jQuery.post('https://jsonplaceholder.typicode.com/posts', data, (response) => {
        console.log('response: ',response);
      })
    });
    

    如果您查看控制台。可以看到任何未定义的变量都没有问题。如果您查看网络选项卡,您可以看到已发送 POST 请求。

    这也应该作为一个示例,说明如何以人们可以实际帮助您的方式更好地表达您的问题,即使用 CodePen 或类似方法。

    【讨论】:

    • 真..,奇怪的是,然后是一些wordpress过滤器,所以我无法获得值..,嗯
    • 我认为这回答了这个问题。也许将其标记为已接受的答案,并在您弄清楚要问什么后提出一个新问题。另外,我建议您通读我对您问题的编辑,并根据我的大写内联 cmets 进行澄清。
    • 我只是在查看 codepen 上的代码:网络 - 预览显示(选项:“'USER_ID':'my id is 32'”)...,这不应该在"option",应该是正确的 (USER_ID: 'my id is 32' ,)
    • @maja 那你为什么把它分配给选项?我已根据您的评论为您更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多