jQuery AJAX调用返回[object Object]

14

我正在为一个网站开发股票交易所的jQuery修复。

编辑:它根据返回值更新网页上的ID/CLASS或输入值。

index.php:

<!doctype html>

<script src="http://code.jquery.com/jquery-1.9.1.js"></script>

<meta charset="utf-8">
<title>load demo</title>
<script type="text/javascript">
$(document).ready(function() {
    $.ajax({
        url: '/datacall/demo.json',
        dataType: 'json',
        success: function( resp ) {
            $( '#div' ).val( resp.currency[0].amount );
        },
        error: function( req, status, err ) {
            console.log( 'Something went wrong', status, err );
        }
    });
    var end = parseInt($('#value').val());
    var newend = parseInt($('#div').val());
    var result = $( end * newend );
    $('#clickme').click(function() {
        $('#new').val( result );
    });
});
</script>

<div>

    <input type="hidden" value="2500" id="value" />

    <input type="hidden" value="" id="div">

    <input type="text" id="new" value="" readonly/>

    <input type="button" value="Change" id="clickme" />

</div> 

当前返回的结果是:

[object Object]

我也尝试过使用 .text() 方法将其返回到 div 中。

demo.json:

    { "currency" : [
  {
    "name" : "South Africa",
    "code" : "ZAR",
    "amount" : 0.14
  },
  {
    "name" : "America",
    "code" : "USD",
    "amount" : 0.64
  },
  {
    "name" : "Europe",
    "code" : "GBP",
    "amount" : 1.29
  }
] }

请问有人能告诉我哪里做错了吗?

先谢谢了!


1
试着使用 console.log(resp),它会返回什么? - MisterBla
展示给我们回应,然后我们就可以帮助你。 - mguimard
你能让我们看一下你的 demo.json 页面的源代码吗?你尝试过 console.log(resp); 吗? - Chris Kempen
这意味着,resp.currency[0].amount 实际上返回的是一个对象。请尝试使用 console.log(resp.currency[0].amount) 来找出返回的数据/对象。 - Slevin
1
尝试在fiddle中使用它,似乎运行良好。您的对象没有任何问题。 - MisterBla
5个回答

22

你可以这样做:

// Create some global variables
var end = parseInt($('#value').val(), 10);
var newend = 0;
var result = 0;

$.ajax({
    url: '/datacall/demo.json',
    dataType: 'json',
    success: function (resp) {

        // Check the values in console
        console.log(resp.currency[0].amount);
        console.log(resp.d.currency[0].amount);

        $('#div').val(resp.currency[0].amount);
        newend = parseInt(resp.currency[0].amount, 10);
        result = end * newend;

        // No need to create a new jQuery object using $()
        // result = $( end * newend );
    },
    error: function (req, status, err) {
        console.log('Something went wrong', status, err);
    }
});

$('#clickme').click(function () {
    $('#new').val(result);
});

因此,这里的主要问题是:

  • 您需要在ajax成功回调中完成所有result逻辑,因为ajax是异步的,您总是会得到空值的endnewend变量。
  • 不需要执行result = $( end * newend );,因为它创建了一个新的jQuery对象实例,导致您得到[object Object]

1
感谢大家的评论和帮助!@palash我已经将这个应用到我的文件中,但是我得到了以下错误:在console.log(resp.d.currency[0].amount);上出现未捕获的TypeError:无法读取未定义的属性'currency'。 - Vaughan Thomas
@VaughanThomas 好的,那只是为了测试和调试目的,你可以删除所有的 console.log 代码。 - palaѕн
https://dev59.com/62Eh5IYBdhLWcg3wnEYc - RationalRabbit

20

[object Object] 基本上是一个数组

尝试这段代码:

   success: function( resp ) {
       //$( '#div' ).val( resp.currency[0].amount );
       alert(JSON.stringify(resp));
    },

这个应该会显示给你一个数组,可以让你更好地选择要输出的元素


在执行 JSON.stringify(resp) 后,我获得了一个对象。接下来我该怎么做? - Yixing Liu

2
你正在$()内计算产品。
var end = parseInt($('#value').val());
var newend = parseInt($('#div').val());
var result = end * newend; // this $(end * newend) is probably what was wrong

1
这段代码。
var end = parseInt($('#value').val());
var newend = parseInt($('#div').val());
var result = $( end * newend );

ajax调用成功之前正在被评估,需要将其移动到成功块中。


0

像这样使用 for 循环:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
  $( "select[name='continue[matiere]']" ).change(function () {
      var matiereID = $(this).val();


      if(matiereID) {


          $.ajax({
              url: "{{ path('ajaxform') }}",
              dataType: 'Json',
              data: {'id':matiereID},
              type:'POST',
              success: function(data) {
                  $('select[name="continue[chapitre]"]').empty();
                  for(i = 0; i < data.length; i++) {  
                    student = data[i];  

                      $('select[name="continue[chapitre]"]').append('<option value="'+ student['id'] +'">'+ student['nom'] +'</option>');
                  };
              }
          });


      }else{
          $('select[name="continue[chapitre]"]').empty();
      }
  });
  </script>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接