2011-02-07 37 views
2

我无法让我的代码在使用jquery库中的ajax调用的回调中运行。代码如下:jquery:ajax调用get jsonp不会调用函数

function processJSONDirectoryFile(jsonData) { 
     finished = false; 
     for (var i = 0; i < jsonData.length; i++) { 
       processJSONCountryFile(jsonData[i]); 
     } 
     finished = true; 
} 

function getJSON() { 
    //snip 

    $.ajax({url:  'http://example.org/api/rest/something', 
      data:  {}, 
      dataType: 'jsonp', 
      timeout: 10000, 
      jsonp: "callback", 
      jsonpCallback: "processJSONDirectoryFile", 
      }); 
    //snip 
} 

我检查我可以加载http://example.org/api/rest/something?callback=myfunc和按预期工作。我使用萤火虫在此代码中设置断点。 ajax调用断点被击中,但processJSONDirectoryFile内的断点从未被击中。

我还应该提到我使用的是jsonp,因为我的代码在不同的域上运行到example.org,所以我需要使用jsonp来解决域控制问题。

我是否犯了一些明显的错误?

回答

5

我相信你应该解除引用的功能,并通过引用传递:

$.ajax({ url: 'http://example.org/api/rest/something', 
    // This empty data parameter probably isn't necessary. 
    data: {}, 
    dataType: 'jsonp', 
    timeout: 10000, 
    jsonp: "callback", 
    jsonpCallback: processJSONDirectoryFile, 
}); 

此外,这应该是等价的,如果你喜欢一个更一致$.ajax()语法:

$.ajax({ 
    url: 'http://example.org/api/rest/something?callback=?', 
    dataType: 'jsonp', 
    timeout: 10000, 
    success: processJSONDirectoryFile 
}); 

按照惯例, jQuery将为查询字符串中的callback键值插入其随机生成的回调函数名称。所以,一切都会自动“连线”。

+0

恐怕既不是这些电话的管理调用我的函数。我尝试了一些变化,但没有运气。任何其他的想法,或如何调试的想法? – 2011-02-07 15:10:02

0

尝试正确调用你的函数:

processJSONDirectoryFile()