0

我正在尝试使用 jsonp 实现跨域调用的 jQuery ajax 调用,代码如下 -

$.ajax({
    async:true,
    cached:true,
    url: 'cfcs/TempRepository.cfc?method=getAllCategories'
        +'&storeID='+ storeId
        +'&callback=?',
    type: 'get',
    data: '',
    dataType: 'jsonp',
    success: PopulateCategoryObject,
    error: function (xhr, status, error) {
        console.log(xhr + ',' + status + ',' + error);
    }
});

function PopulateCategoryObject(results) {
    //populate the categories
}

我在这里对回调的使用感到困惑。如果我删除 $.ajax 的成功属性并使用 callback=PopulateCategoryObject 代替 callback=? 像 -

$.ajax({
    async:true,
    cached:true,
    url: 'cfcs/TempRepository.cfc?method=getAllCategories'
        +'&storeID='+ storeId
        +'&callback=PopulateCategoryObject',
    type: 'get',
    data: '',
    dataType: 'jsonp',
    error: function (xhr, status, error) {
        console.log(xhr + ',' + status + ',' + error);
    }
}); 

它的不同之处在于,它返回的结果如下 -

PopulateCategoryObject, jQuery172012112959187034678_1376976441013( // data here )

并且,函数 PopulateCategoryObject 没有被执行。

我无法弄清楚如何在这里设置回调函数?为什么会在结果中添加“jQuery172012112959187034678_1376976441013”?

提前致谢。

4

2 回答 2

1

尝试

$.ajax({
    cached:true,
    url: 'cfcs/TempRepository.cfc?method=getAllCategories' + '&storeID=' + storeId,
    jsonpCallback: 'PopulateCategoryObject',
    dataType: 'jsonp',
    error: function (xhr, status, error) {
        console.log(xhr + ',' + status + ',' + error);
    }
}); 
于 2013-08-20T05:59:35.373 回答
0

如果您不希望 ajax 调用缓存:将"cache"参数设置为false... 否则将其设置为true.

另一件事......如果你不想使用"success"参数来触发你的回调,试试 jquery $.deffer:阅读这个!:http ://learn.jquery.com/code-organization/deferreds/examples/

于 2013-08-27T05:37:46.370 回答