Jquery json请求偶尔失败

Jquery json请求偶尔失败,jquery,ajax,json,jsonp,Jquery,Ajax,Json,Jsonp,我试图构建一些东西,遍历列表中的每个项目,获取产品sku,在jsonp请求中包含sku,希望返回一个对象。我有它做所有这些事情,但偶尔失败 因此,脚本的示例在列表元素中循环,获取类以获得正确的id,然后发送请求: $j(document).ready(function(){ $j('ul.products-grid li a.product-image img').each(function(index){ var prodId = $j(this).attr('clas

我试图构建一些东西,遍历列表中的每个项目,获取产品sku,在jsonp请求中包含sku,希望返回一个对象。我有它做所有这些事情,但偶尔失败

因此,脚本的示例在列表元素中循环,获取类以获得正确的id,然后发送请求:

$j(document).ready(function(){
    $j('ul.products-grid li a.product-image img').each(function(index){
        var prodId = $j(this).attr('class').match(/[\d]+$/),
            s7jsonReqUrl = '/is/image/z/' + prodId + '/?req=imageset,json';
        $j.ajax({
                 url: s7jsonReqUrl,                         
                      dataType: 'jsonp',
                      jsonp: 'true',
                      jsonpCallback: 's7jsonResponse',
                      success: function(response)
                      {                
                        x = response["IMAGE_SET"];  
                        console.log(x);
                      }, 
                      error: function(data, status)
                      {
                        console.log ( 'error : ' + data + ' : ' + status );
                      }
                 });
              });
            })

如果我获取这些URL中的每一个并手动将它们粘贴到浏览器中(来自s7jsonReqUrl变量的URL),它们将返回预期的json对象,即使是上面测试失败的对象。知道这里发生了什么吗?

由于jQuery反复定义和重新定义s7jsonResponse,您很可能达到了竞争条件

因为回调参数不是动态的,所以我会用非jquery的方式来实现

window.s7jsonResponse = function(data) {
    console.log(data);
};

var sendForJSON = function (prodId) {
    var s = document.createElement("script");
    s.src = '/is/image/z/' + prodId + '/?req=imageset,json';
    document.body.appendChild(s);
};
现在只需使用
sendForJSON
获取数据

.each(function(){
    var prodId = $j(this).attr('class').match(/[\d]+$/);
    sendForJSON(prodId);
})

可能还应该添加逻辑,以便在收到响应后删除脚本标记。

您正在发送n个请求,所有请求都希望使用完全相同的jsonp回调。那是自找麻烦。谢谢凯文!这很有帮助。我已经再次陷入困境,我想我会把它扔到这里,看看你是否有任何想法(可能不得不再发一篇这样的帖子)。因此,我现在可以为列表中的每个项目获取所需的变量。万岁!现在,我需要在最初在.each中迭代的每个项之后追加该var(来自json响应)。我迷路了。。所以,若我将类名的另一个参数传递给该追加将要到达的目标,我将如何执行它?从window.s7json响应函数??感谢您提供的更多帮助或想法。您可以从返回的数据中提取prodId,然后使用它获取原始元素Cool是的,我正在处理类似的想法。。有时问这个问题能帮助我把事情想清楚。再次感谢你的帮助!!