Ajax存储响应变量中的json

时间:2017-09-23 13:51:23

标签: php arrays json ajax

成功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

2 个答案:

答案 0 :(得分: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,那么变量就会在层中冒泡   范围,直到它遇到给定名称或全局变量   对象(窗口,如果你在浏览器中这样做),然后它   重视。

答案 1 :(得分:1)

您的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成功函数中使用回调函数。