首页 新闻 搜索 专区 学院

javascript:如何在ajax callback函数中将值返回给上层callback函数

0
悬赏园豆:100 [已解决问题] 解决于 2012-12-03 16:35

先看代码:

content = content.replace(/<img [^>]*src=['"]([^'"]+)[^>]*>/gi,
    function (match, capture) {
        $.ajax({
            data: { imgSrc: capture },
            dataType: 'jsonp',
            success: function (data) {
                //如何将data值返回给function (match, capture)
            }
        });
});

需求是:在ajax的回调函数中将ajax请求的返回值传递给上层函数(也就是replace的回调函数)。

简面言之:function (match, capture) 要返回 success: function (data) 中的 data 值。

dudu的主页 dudu | 高人七级 | 园豆:38819
提问于:2012-12-03 15:11
< >
分享
最佳答案
2

哈哈 官方的解释是这样

Cross-domain requests and dataType: "jsonp" requests do not support synchronous operation.

所以当因为跨域使用了JSONP的时候,即使设置成同步也是不行的。

可以这样接收返回值

content = content.replace(/<img [^>]*src=['"]([^'"]+)[^>]*>/gi,
    function (match, capture) {
        $.ajax({
            data: { imgSrc: capture },
            dataType: 'jsonp',
            success: function (data) {
                //如何将data值返回给function (match, capture)
     success_function(data);
} }); });

function success_function(info)
{

  //处理接收到的数据
}

收获园豆:100
Parry | 小虾三级 |园豆:583 | 2012-12-03 15:45

看来只有用这个方法了,我用这个方法实现试试

dudu | 园豆:38819 (高人七级) | 2012-12-03 15:56

实现代码:

var imgSrcRegex = /<img [^>]*src=['"]([^'"]+)[^>]*>/gi;
var match;
while ((match = imgSrcRegex.exec(content)) !== null) {
    var originImgSrc = match[1];
    $.ajax({
        data: { imgSrc: originImgSrc },
        dataType: 'jsonp',
        success: function (data) {
            replaceImgSrc(content, originImgSrc, data);
        }
    });
}

function replaceImgSrc(content, originImgSrc, newImgSrc) {
    content = content.replace(originImgSrc, newImgSrc);
}
dudu | 园豆:38819 (高人七级) | 2012-12-03 16:34
其他回答(6)
0

直接return data 不行吗?

chenping2008 | 园豆:9836 (大侠五级) | 2012-12-03 15:16

不行,得到的是undefined

支持(0) 反对(0) dudu | 园豆:38819 (高人七级) | 2012-12-03 15:18

@dudu: 那就ajax改为同步的,或者你把replace放到ajax success中去

 

要不可以修改replace函数啊?

支持(0) 反对(0) chenping2008 | 园豆:9836 (大侠五级) | 2012-12-03 15:27
0

为什么要返回回去啊,直接对值进行处理不行吗

Rich.T | 园豆:3440 (老鸟四级) | 2012-12-03 15:18

必须要返回回去

支持(0) 反对(0) dudu | 园豆:38819 (高人七级) | 2012-12-03 15:24
0

把AJAX设为同步方式进行阻塞,等待返回结果。。。

Mr h... | 园豆:206 (菜鸟二级) | 2012-12-03 15:20
var result = '';
$.ajax({
            data: { imgSrc: capture },
            dataType: 'jsonp',

async:false,

            success: function (data) {
                result = data;
            }
        });
 console.log(result );

这样不知道是否满足意思。。。

支持(1) 反对(0) Mr h... | 园豆:206 (菜鸟二级) | 2012-12-03 15:23

@Mr h...: 同步也不行

支持(0) 反对(0) dudu | 园豆:38819 (高人七级) | 2012-12-03 15:31

@dudu: 那把回调函数放到replace之前 行不行

支持(0) 反对(0) Mr h... | 园豆:206 (菜鸟二级) | 2012-12-03 15:35
0

你要知道 你这个 是 异步的 !

张坤 | 园豆:1865 (小虾三级) | 2012-12-03 15:23
1

ajax是异步的直接return的方式显然是不行,建议的做法是直接将要对数据进行处理的函数,在方法中传递进来,这样就达到了数据处理的效果;

 如果非要返回的话,建议定义一个类似消息队列的处理方式来达到这个效果,个人感觉必须返回回去的难度有点大

az235 | 园豆:8283 (大侠五级) | 2012-12-03 15:38
1

楼上+1

飞来飞去 | 园豆:2057 (老鸟四级) | 2012-12-03 15:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册