我一定在这里错过了一些东西,因为这似乎是一个非常简单的问题,但是我已经尝试了大多数解决方案,但没有任何运气。
我只是尝试跨域创建一个 ajax 请求并将结果存储到 javascrip 变量中。 我得到了有效的javascript,我的回调被触发了,但我的成功从来没有。
我试过: 使用 jsonpCallback: myCallback
设置jsonp: false
(如下所示) 删除jsonp: false
和jsonpCallback: mcCallback
并设置 url url?callback=?
其他一些事情...关键是,我做错了什么,这是非常基本的
对于下面的示例,我确实得到了alert('hello')
但随后我在控制台中得到了parsererror
(来自错误函数)
编辑以在阅读评论后添加现在的状态。 不过,同样的问题。 成功不叫
$.ajax({
url: 'http://localhost/faqservice/questions',
type: 'GET',
dataType: 'jsonp',
error: function (x, t, r) { alert(x + t + r); },
success: function (data) {
alert('success');
}
});
问题最初是如何产生的
$(document).ready(function () {
$.ajax({
type: "GET",
url: "http://localhost/faqservice/questions",
dataType: 'jsonp',
jsonp: false,
jsonpCallback: myCallback,
error: function (httpReq, status, exception) {
console.log(status);
},
success: function(data) {
alert('success');
}
});
});
myCallback = function (data) {
alert('hello');
}
正如注释所说,您的服务器必须像 'myCallback({"some":"data"})'
不仅仅是原始 JSON: '{"一些":"数据"}'
jsonp有点奇怪,它是通过插入脚本标签来请求的,因为脚本标签可以跨域传输。 您的服务器必须提供 JS 代码,以便在响应到来时执行某些操作。
jQuery为你完成了大部分的浏览器端。 当它发送请求时,它会添加一个参数,如 callback=jQuery17209078477467410266_1426708743857
然后,它会设置一个该名称的函数,该函数将在响应到来时处理响应。您的服务器必须采用此字符串并按如下所示构造代码: jQuery17209078477467410266_1426708743857({"数据": "the"});
如果你只是传递 json,它会像一个大表达式一样执行并被遗忘。