【问题标题】:Merge objects received from Ajax calls合并从 Ajax 调用接收到的对象
【发布时间】:2013-12-04 00:34:48
【问题描述】:

我正在尝试合并我通过 Ajax 作为 JSON 接收的两个对象,但我无法访问该变量并将其声明为全局的。我做错了什么?

var parametroswatcher = {
        // asinid: $('#rate').attr('data-id'),
        asinid: GetURLParameter('asin'),
        mod: '0'
    };

    var post = $.post("../../likes/like.php", parametros, 'json');
    post.done(function( data ) {
    postdata = jQuery.parseJSON(data);

    });
    var postwatch = $.post("../../watcher/watch.php", parametroswatcher, 'json');
    postwatch.done(function( data ) {
    postwatchdata = jQuery.parseJSON(data);

    });
    var postmerge = $.extend(postdata,postwatchdata);

    console.log(postmerge);

postdata = jQuery.parseJSON(data)的答案应该是: {"resplike":"needlogin"}.

postwatchdata = jQuery.parseJSON(data) 的答案应该是: {"respwatch":"needlogin"}.

但要访问控制台,我没有得到 postdatapostwatchdata 合并,而是得到一个空对象。

Object {} product.js:61

编辑: 我想在 post 和 postwatch 完成后,在 product 函数中使用数据。

postdata = jQuery.parseJSON(data) 的答案应该是:{"resplike":"needlogin"}。

而 postwatchdata = jQuery.parseJSON(data) 的答案应该是:{"respwatch":"needlogin"}。

 功能产品(数据){

        var obj = jQuery.parseJSON(data);

        if (obj.resplike=='like'){
        var respuesta = 'No te gusta';
        }
        否则如果(obj.resplike=='不喜欢'){
        var respuesta = 'Te gusta';..blabla

我想进入 obj: {"resplike":"needlogin", "respwatch":"needlogin"}

【问题讨论】:

  • postmerge 在您的异步调用返回之前设置。
  • 即使您收到的是 JSON,但问题实际上与 JSON 无关。这是关于如何合并 JavaScript 对象 并处理多个 Ajax 调用。

标签: javascript jquery


【解决方案1】:

您无法处理这样的异步调用的结果。在异步函数调用上完成的所有操作都必须在该异步方法的回调中完成。阅读更多关于this in answer

var parametroswatcher = {
    // asinid: $('#rate').attr('data-id'),
    asinid: GetURLParameter('asin'),
    mod: '0'
};

var post = $.post("../../likes/like.php", parametros, 'json');
var postwatch = $.post("../../watcher/watch.php", parametroswatcher, 'json');

$.when(post, postwatch).then(function(arg1, arg2){
    var postmerge = $.extend(arg1[0], arg2[0]);
    console.log(postmerge);
})

此外,由于您需要等待来自两个不同请求的响应,您可以使用$.when(),一旦所有传递的承诺都得到解决,它将支持成功处理程序。

【讨论】:

  • 我想你的意思是arg2[0]。并且请添加解释,不要只是发布代码。
  • @FelixKling 我正在编辑答案...添加指向您著名答案之一的链接
  • @ArunPJohny 对象 {0:“{”,1:“””,2:“r”,3:“e”,4:“s”,5:“p”,6: "w", 7: "a", 8: "t", 9: "c", 10: "h", 11: """, 12: ":", 13: """, 14: "n ",15:“e”,16:“e”,17:“d”,18:“l”,19:“o”,20:“g”,21:“i”,22:“n”, 23: """, 24: "}", 25: " ", 26: " ", 27: " ", 28: " ", 29: " ", 30: " ", 31: " ", 32: " ",重复:函数}
  • @treska 是你要找的东西
  • @treska 你能打印出arg1[0]arg2[0] 的值吗
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-22
  • 2018-11-18
  • 2012-10-20
  • 1970-01-01
相关资源
最近更新 更多