【问题标题】:Ajax store response json in variablesAjax 将响应 json 存储在变量中
【发布时间】:2017-09-23 13:51:22
【问题描述】:

ajax调用成功的响应是这样的json格式:

{"prize_name":"Keys 4","prize_image":"http:\/\/localhost\/web-game-w\/wp-content\/uploads\/2017\/09\/4rare.jpg"}

如何将“prize_name”和“prize_image”存储在变量中以备后用?

这里是ajax代码:

$("#ajax").click(function(e){
    e.preventDefault();
    var data = {
        'action': 'getprize_data',
        dataType: "json", 
        async: false
    };
    $.post(ajaxurl, data, function(response) {
        console.log(response);
        // Store vars 
    });
});

我还有一个问题。这个response.prize_name 将返回错误response.prize_name is undefined

【问题讨论】:

  • 在 ajax 调用之前不使用 var 声明两个变量,并且作为响应的 sson 将这些值分配给这些变量
  • @Gardezi 我如何分配这些值?我尝试了 response.prize_name 和 response.prize_image。我总是不确定。
  • 你如何从服务器@Yamona返回你的ajax请求响应
  • 它以 json 格式返回,看起来像这样 {"prize_name":"text","prize_image":"url"}
  • 请控制台记录您的响应,如果它未定义,那么这意味着您没有从服务器正确发送值。我认为您正在使用 return 关键字来返回 JSON 响应,如果这是问题,那么请像这样返回您的 json 响应 echo json_encode([])

标签: php arrays json ajax


【解决方案1】:

在 ajax 调用开始之前声明这些变量而不使用 var 并将值分配给成功函数中的这些变量

    prize_name = prize_image = ""; 
    $("#ajax").click(function(e){
        e.preventDefault();


        $.ajax({ 
          type: "POST", 
          url: ajaxurl, // give url over here
          data: {action: 'getprize_data'}, 
          dataType: 'json', 
          async: false // always avoid false if you can
          success: function(response) { 
            console.log(response);
            response = JSON.parse(reponse);
            // Store vars 
            // assign the values over here 
            // maybe you will need to decode the json 
            // if you are encoding it so use JSON.parse
            // for decoding the json
          }, 

      });

    });

现在我说声明变量而不使用 var 的原因是因为

如果你不使用 var ,变量会通过层层冒泡 作用域,直到遇到给定名称或全局变量 对象(窗口,如果您在浏览器中执行此操作),然后 附上。

【讨论】:

    【解决方案2】:

    您的post 呼叫错误。我建议避免异步为假。但是,如果您不惜一切代价需要这样的行为,您可以将您的帖子改写为:

    $.ajax({
       type: "POST",
       url: ajaxurl,
       data: {action: 'getprize_data'},
       success: function(response) {
                 ......
                },
       dataType: 'json',
       async: false
     });
    

    您可以利用data attributes 来创建全局变量。

    你可以这样存储值:

    $('#ajax').data('prizeName', response.prize_name);
    

    而且,将来,当您需要这样的值时,您可以简单地通过以下方式获取该值:

    $('#ajax').data('prizeName');
    

    请记住,ajax 是异步的,因此只有在执行 succes 回调时该值才可用。因此,我建议在您的 ajax 成功函数中使用回调函数。

    【讨论】:

      猜你喜欢
      • 2014-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多