jquery:ajax调用get jsonp不调用函数

时间:2011-02-07 14:13:09

标签: jquery jsonp

我无法使用jquery库中的ajax调用让我的代码在回调中运行。代码如下:

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并且按预期工作。我正在使用firebug在此代码中设置断点。命中ajax调用断点,但processJSONDirectoryFile内的断点永远不会被命中。

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

我犯了一些明显的错误吗?

2 个答案:

答案 0 :(得分: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键的值注入其随机生成的回调函数名称。所以,一切都会自动“透明地”连接起来。

答案 1 :(得分:0)

尝试正确调用您的函数:

  

processJSONDirectoryFile()