$.ajax()成功调用,但不会运行方法
$.ajax() success called, but will not run method
这真的让我很困惑。知道为什么会这样吗?
这段代码可以工作:
$.ajax({
type: 'GET',
dataType: 'json',
url: 'http://localhost:3235/Users/searchUsers?callback=?&searchString=' + searchString,
success: alert("Success")
});
这个代码没有:
$.ajax({
type: 'GET',
dataType: 'json',
url: 'http://localhost:3235/Users/searchUsers?callback=?&searchString=' + searchString,
success: function(data){
alert("Success");
}
});
第一个代码段语法不好,不应该使用,您会得到警告,因为它是立即调用的,而不是在成功时调用的。
没有收到第二个代码片段的警告只有两个原因。
- 服务器没有返回成功状态码,例如,它是404、500等,而不是200。
- 唯一的其他可能性是返回的jsonp不是jsonp,或者不是有效的jsonp。
很可能你混淆了JSONP和JSON,所以我给你每个例子。首先是json:
{"foo":"bar"}
这是JSONP ...?callback=somecallbackname&...
:
somecallbackname({"foo":"bar"})
注意,somecallbackname
将由jQuery提供,您必须获得回调get参数的值,并使用它来生成相应的JSONP
第一个"工作"是因为代码中的错误。它正在调用警报并存储它在成功回调中返回的内容。
添加一个错误处理程序来查看实际问题是什么。
$.ajax({
type: 'GET',
dataType: 'json',
url: 'http://localhost:3235/Users/searchUsers?callback=?&searchString=' + searchString,
success: function(data){
alert("Success");
},
error: function (xhr, status, msg) {
console.log(status, msg);
}
});
如果无法触发错误处理程序。查看JavaScript控制台上的net选项卡,并查看http请求。您将看到服务器返回的错误。
您从第一个代码片段获得的警告是误导性的。
当alert("Success")
被分配给success
属性时,您实际上立即调用它。
你的第二种方法是你想要的。
第一个例子是错误的- alert("Success")
的结果被分配为回调,而不是函数。
您的第二个示例更接近,但是您混淆了JSON和JSONP。如果你的服务返回JSON,你应该从你的请求url中删除callback=?
(实际上,你可以删除它,设置dataType:'jsonp'
会自动添加它)。
var ajax_url = 'http://example.com:3235/Users/searchUsers?searchString=' + searchString;
$.ajax({
type: 'GET',
dataType: 'json',
url: ajax_url,
success: function(data){
alert("Success");
},
error: function(xhr, status, error){
alert("Error: " + status + " " + error);
},
complete: function(xhr, status){
alert("Complete: " + status);
}
});
相关文章:
- Meteor方法在客户端返回null,在客户端运行的相同方法返回正确的值
- PhantomJS - 检查javascript函数是否正在运行的任何方法
- 实现比较方法的最佳实践是什么;s的比较类型是在运行时选择的
- Meteor应用程序无法运行-对象#<编译器>没有方法'主机'
- 使用c#在Web服务器上运行JavaScript方法
- strongloop script.js run find in before delete方法:如何同步运行异步方法
- jQuery 在运行 C# 方法时重置
- 在浏览器关闭选项卡或浏览器退出上运行方法
- jQuery 运行 C# 方法
- Angularjs $injector:unpr 在缩小后的运行方法中
- 检查隐藏的布尔值以运行方法
- 引导方法和运行方法之间的角度有什么区别
- 基于集合侦听器运行方法的主干
- 运行方法中的Angular$q服务实现
- 在第一个方法完成后运行方法
- AngularFire:在$firebaseArray更改时运行方法
- 如何在用户关闭浏览器时在控制器中运行方法
- $.ajax()成功调用,但不会运行方法
- AngularJS:如何保持在'运行'方法,直到完成
- 在"add"事件上运行方法的Backbone Collection获取:";TypeErr