以下是我的代码:
function jsonpCallback(response){
//JSON.stringify(response)
alert(response);
}
$.ajax({
url: url,
dataType: 'jsonp',
error: function(xhr, status, error) {
alert(error);
},
success: function(data) {
alert(data);
jsonpCallback(data);
}
});
这里我的url变量是包含以下数据的链接,据我所知,它是JSON格式:
[{"destination":"United States","destinationId":"46EA10FA8E00","city":"LosAngeles","state":"California","country":"United States"}] etc..
我希望在将连续数据传递给它之后调用jsonpCallback函数。但$ .ajax的成功论证并没有调用函数,因为我没有得到任何数据。但我的调试器窗口显示响应,那么为什么它不会出现$ .ajax函数?
任何帮助......提前感谢。
答案 0 :(得分:1)
尝试传递ajax调用GET / POST的类型。
$.ajax({
type: "GET",
url: url,
dataType: 'jsonp',
error: function(xhr, status, error) { alert(error); },
success: function(data) {
alert(data);
jsonpCallback(data);
}
});
function jsonpCallback(response){
//JSON.stringify(response)
alert(response);
}
答案 1 :(得分:1)
您尝试加载数据的网址不支持JSONP,这就是调用回调的原因。
如果您拥有端点,请确保处理回调GET参数。在PHP中,您的输出将如下所示:
<?php
echo $_GET['callback'].'('.json_encode($x).')';
这会将结果转换为如下所示:
jsonp2891037589102([{"destination":"United States","destinationId":"46EA10FA8E00","city":"LosAngeles","state":"California","country":"United States"}])
当然回调名称会根据jQuery自动生成的内容而改变。
这是必需的,因为JSONP的工作原理是在<script>
中创建一个新的<head>
标记,以强制浏览器加载数据。如果callback
GET参数未被处理(并且URL返回JSON响应而不是JSONP响应),则数据将被加载yes,但不会被分配给任何内容,也不会被转移(通过回调任何事情。从本质上讲,数据会丢失。
如果不修改端点,您将无法从该URL加载数据。
答案 2 :(得分:0)
首先检查您正在呼叫的事件$.ajax
功能......
<script type='text/javascript'>
jQuery('#EnrollmentRoleId').change(function(){
alert("ajax is fired");
$.ajax({
type: "GET",
url: url,
dataType: 'jsonp',
error: function(xhr, status, error) { alert(error); },
success: function(data) {
alert(data);
jsonpCallback(data);
}
});
});
function jsonpCallback(response){
//JSON.stringify(response)
alert(response);
}
</script>
第二次尝试将$
替换为jQuery
。
如果您认为有任何冲突错误,请尽量不发生冲突。
jQuery ajax error callback not firing
function doJsonp()
{
alert("come to ajax");
$.ajax({
url: url,
dataType: "jsonp",
crossDomain: true,
jsonpCallback:'blah',
success: function() { console.log("success"); },
error: function() { console.log("error"); }
});
}
然后检查你的json数据是否有效..
由于
答案 3 :(得分:0)
我注意到$ .ajax的一个奇怪的事情是,如果内容类型不完全匹配,那么它就不算成功。试着玩弄它。如果您将success
更改为complete
(并修复参数),是否会发出警报?
答案 4 :(得分:0)
它不起作用,因为您的服务器不呈现JSONP响应。它呈现JSON响应。
要使JSONP正常工作,服务器必须调用ajax请求发送的javascript函数。该函数由jQuery生成,因此您不必担心它。
但服务器必须担心它。默认情况下,此函数的名称在callback
参数中传递。例如,服务器的URL将为http://some.domain/ajax.php?callback=functionName(注意callback=functionName
)。
所以你需要在服务器端实现类似的东西(这里是PHP):
$callback = $_GET['callback'];
// Process the datas, bla bla bla
// And display the function that will be called
echo $callback, '(', $datas, ');';
返回的页面将在javascript中执行,因此将调用该函数,因此jQuery将调用success
函数。