如何使用jsonp / jquery触发函数

时间:2012-06-24 10:32:24

标签: javascript jquery jsonp

我有这个功能:

 var current_url=window.location.href;
$.ajax({url:      'http://api.apps.com/html/'+appid,
      data:      {url:current_url},
      dataType: 'jsonp',
      timeout:  10000,
      jsonp: "set_url_target",
      success: function(data) { console.log(data); },
       error: function(jqXHR, textStatus, errorThrown) { console.log(errorThrown); console.log(textStatus); }
      }).done(function() { 
          console.log("Message has been complete!!");
        });

我想要的是在http://api.apps.com/html/上触发此功能(注意它是一个不同的域名)。

function set_url_target(url){
    console.log("Url has been recieved: "+url);
}

到目前为止,set_url_target没有被触发,我没有被打印到控制台,没有错误或没有...为什么?

2 个答案:

答案 0 :(得分:2)

如果外部应用程序不在您的控制之下,我担心您不能做太多,因为您需要更新服务器发送到客户端的响应以成功使用JSONP ..

因此你有两个选择: a)在应用程序的服务器端进行调用并将其返回给客户端 b)或者完全使其成为客户端,您可以使用雅虎管道或其他服务,将json响应转换为有效的jsonp响应。

这是一个如何使用yahoo管道进行操作的示例:https://gist.github.com/316660

我不确定许可证,检查它们以及是否存在相关的API /带宽成本。让我知道它是如何为你工作的..

答案 1 :(得分:0)

试试这个,请注意jsonpjsonpCallback属性

    var current_url=window.location.href;
    $.ajax({url:      'http://api.apps.com/html/'+appid,
            data:      {url:current_url},
            dataType: 'jsonp',
            timeout:  10000,
            jsonp : false,
            jsonpCallback: "set_url_target",
       success: function(data) { console.log(data); },
       error: function(jqXHR, textStatus, errorThrown) { console.log(errorThrown); console.log(textStatus); }
  }).done(function() { 
      console.log("Message has been complete!!");
    });

有关详情,AJAX