【问题标题】:jQuery AJAX call returns [object Object]jQuery AJAX 调用返回 [object Object]
【发布时间】:2019-10-19 07:37:37
【问题描述】:

我正在为一个网站进行证券交易所 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
  }
] }

请有人告诉我我做错了什么。

提前致谢!

【问题讨论】:

  • 试试console.log(resp),会有什么效果。
  • 向我们显示回复,我们会为您提供帮助。
  • 我们可以查看您的demo.json 页面的来源吗?你试过console.log(resp);吗?
  • 这意味着,resp.currency[0].amount 实际上返回了一个对象。尝试使用console.log(resp.currency[0].amount) 弄清楚它并检查返回的数据/对象。
  • Tried using it in a fiddle,似乎工作正常。您的对象似乎没有任何问题。

标签: javascript jquery html ajax


【解决方案1】:

你可以这样做:

// 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 是 asynchronous 并且您总是得到 endnewend 变量的空值。
  • 不需要这样做result = $( end * newend );,因为它会创建一个新的 jQuery 对象实例,因此你会得到[object Object]

【讨论】:

  • 感谢大家的cmets和帮助! @palash我已经将它应用到我的文件中,我得到了 Uncaught TypeError: Cannot read property 'currency' of undefined on console.log(resp.d.currency[0].amount);
  • @VaughanThomas 好的,这仅用于测试/调试目的,您可以删除所有 console.log 代码..
【解决方案2】:

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

试试这个代码:

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

应该向您展示数组,这将使您能够更好地选择要输出的元素

【讨论】:

  • JSON.stringify(resp) 之后,我得到了一个对象。那我该怎么办?
【解决方案3】:

您正在计算 $() 中的乘积

var end = parseInt($('#value').val());
var newend = parseInt($('#div').val());
var result = end * newend; // this $(end * newend) is probably what was wrong

【讨论】:

    【解决方案4】:

    这段代码

    var end = parseInt($('#value').val());
    var newend = parseInt($('#div').val());
    var result = $( end * newend );
    

    在 ajax 调用成功之前被评估。需要移到成功块中

    【讨论】:

      【解决方案5】:

      像这样使用 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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-20
        • 1970-01-01
        • 2017-08-02
        • 2014-06-07
        • 2020-07-18
        • 2018-06-20
        • 1970-01-01
        相关资源
        最近更新 更多