jsonp回调函数没有被调用

Posted

技术标签:

【中文标题】jsonp回调函数没有被调用【英文标题】:jsonp callback function not getting called 【发布时间】:2013-04-25 12:22:42 【问题描述】:

我正在使用 dataType 作为 jsonp 进行跨域 AJAX 调用。我在 URL 中设置了 Jsoncallback 查询字符串参数。但是,回调函数根本没有被调用,而是页面被重定向到自身。

AJAX 调用基本上是点击一个点 CMS 服务,当我直接在浏览器中对其进行测试时,它会返回以下响应:

myfunction('state':'MEL', 'plan':'true' )

这里,“myfunction”是我作为URL中Jsoncallback参数的值传递的字符串

这是我的 AJAX 调用

$.ajax(
  url:"http://website.hostname.com/validatepostcode.dot?postcode="+encodeURIComponent(thepostcode)+ "&Jsoncallback=parseResponse",
  dataType: "jsonp",
  async: false,
  crossDomain:true
  );


function parseResponse(data)

 alert(data);

我在 AJAX 调用中是否缺少任何参数?还是服务端有问题?

【问题讨论】:

点 CMS 服务读取我发送的查询字符串参数,并以 jsonp 格式返回响应,该响应包含在该函数名称中,例如 myfunction('state':'MEL', 'plan':'true' ) 【参考方案1】:

$.ajax jQuery 函数具有特定的配置选项,用于提供代码中似乎缺少的回调函数的名称。

通过设置dataType: 'jsonp'jQuery

添加一个额外的“?callback=?”到 URL 的末尾以指定回调

这会导致问题,因为您还在 url 值中添加了一个回调函数。

要覆盖它,您可以添加 jsonp 选项:

覆盖 jsonp 请求中的回调函数名称。在“callback=?”中将使用该值代替“callback” url中查询字符串的一部分。

您还可以将data 指定为单独的选项(请参阅Sending Data to the server),我也在下面添加了该选项。

以下代码应正确使用parseResponse()作为回调函数。

$.ajax(
  url: 'http://website.hostname.com/validatepostcode.dot',
  type: 'get',
  data: postcode: encodeURIComponent(thepostcode),
  dataType: 'jsonp',
  jsonp: 'parseResponse'
);

【讨论】:

谢谢..我会试试并告诉你。 谢谢@andyb。它有助于。现在又遇到了一个问题。执行进入回调函数后,我试图通过动态设置其动作属性来发布表单。而这并没有发生。它总是重定向到自我。我将为此提出单独的帖子。

以上是关于jsonp回调函数没有被调用的主要内容,如果未能解决你的问题,请参考以下文章

当dataType为JSONP时没有调用ajax成功回调函数。在跨域访问中

在 AngularJS 中设置 JSONP 回调函数

Jquery成功函数未使用JSONP触发

跨域JSONP

JSONP回调不起作用

在 Express JS 和 NodeJS 中为 jsonp 回调函数添加参数