$.ajax() 成功不会运行函数
$.ajax() success won't run function
我的问题是关于$.ajax()
jQuery方法。我无法$.ajax()
中的成功参数工作。
这有效:
$.ajax({
type: 'POST',
url: "/getCodes.php?codes=billingCodes&parent="+$('#wClient').val(),
dataType: 'json',
success: window.alert("inside aJax statement")
});
这不会:
$.ajax({
type: 'POST',
url: "/getCodes.php?codes=billingCodes&parent="+$('#wClient').val(),
dataType: 'json',
success: function(){
window.alert("inside aJax statement");
}
});
在第一种情况下,我收到一个 JavaScript 警报窗口,让我知道我调用的$.ajax()
正在工作。在第二个代码块中更改的所有内容是我将window.alert()
放在function() { window.alert(); }
中。
这样做的目的是验证 $.ajax 是否正在运行,以便当 $.ajax 成功运行时,我可以在function(){}
中放入一些实际有用的代码。
在第二个示例中,除非从服务器成功回调,否则不会发生任何情况。 添加错误回调,正如这里的许多人建议的那样,以查看 ajax 请求确实在工作,但服务器当前未发送有效响应。
$.ajax({
type: "POST",
url: "/getCodes.php?codes=billingCodes&parent="+$('#wClient').val(),
dataType:"json",
success: function(response){
alert(response);
},
error: function(jqXHR, textStatus, errorThrown){
alert('error');
}
});
跟踪错误的有用链接。
您的第一个示例无法证明ajax
调用已奏效。它所做的只是证明已达到ajax
函数,因为在调用函数之前会计算要传递给ajax
函数的匿名对象中的属性值。
您的第一个示例与此基本相同:
// THIS IS NOT A CORRECTION, IT'S AN ILLUSTRATION OF WHY THE FIRST EXAMPLE
// FROM THE OP IS WRONG
var alertResult = window.alert("inside aJax statement");
$.ajax({
type: 'POST',
url: "/getCodes.php?codes=billingCodes&parent=" + $('#wClient').val(),
dataType: 'json',
success: alertResult
})
例如,首先调用并显示alert
,然后success
引用alert
的返回值(可能是undefined
)发生ajax
调用。
你的第二个例子是正确的。如果在第二个示例中未看到警报,则表示ajax
调用未成功完成。添加error
回调以查看原因。
在第一种情况下,当你运行 $.ajax 时,window.alert 会立即执行其次,它仅在您从服务器收到答案时运行,所以我怀疑您的 ajax 请求中有问题
你可能想尝试使用一个承诺:
var promise = $.ajax({
type: 'POST',
url: "/getCodes.php?codes=billingCodes&parent="+$('#wClient').val(),
dataType: 'json'
});
promise.fail( function() {
window.alert("Fail!");
});
promise.done( function() {
window.alert("Success!");
});
这样做的作用是将ajax
调用保存到变量,然后为每个返回状态分配其他功能。但是,请确保您返回的数据类型实际上是 json,否则您可能会看到奇怪的行为!
请注意,js 是单线程的;你的第一个示例之所以有效,是因为它实际上执行了下一个"成功"的代码并存储结果。在这种情况下,没有什么可存储的;它只是弹出一个警报窗口。这意味着 ajax 调用在触发警报后会离开客户端:使用 Chrome 上的开发者工具或同等工具查看此内容。
通过在那里放置一个函数,您可以分配它在 ajax 调用稍后在线程中返回时(或者更准确地说,在响应返回时启动的新线程中)执行某些操作。
你做对了,但你的请求没有成功。尝试添加错误处理程序:
error: function(){alert("Error");};
我猜数据类型不匹配或类似的东西。
你的第二个例子是 100% 正确的。为什么它什么都不做?也许是因为在ajax调用中没有成功。添加"错误"处理程序并使用浏览器的开发人员工具->网络->XHR检查您的ajax调用返回的内容。这确实有助于处理损坏/不正确的 ajax 请求
- jQuery在元素的上下文中运行函数
- Promise函数在.then之后未运行函数化
- 在.append之后运行函数
- 在on.change事件之后运行函数
- 如果文本或值以字符开头,请运行函数
- 如何在节点模块中从命令行运行函数
- 在Fancybox中提交表单时运行函数
- Don'如果字段为空,则不运行函数
- Javascript:如何在页面重新加载后运行函数
- 成功ajax:如果是200状态代码,则运行函数else另一个函数
- 运行函数ifsuccess($.ajax)有200个状态代码
- JavaScript只有在最后一次被调用时才运行函数
- 在异步AJAX调用完成后,通过变量运行函数
- ng中继器打印结果0;当我运行函数时
- 谷歌扩展:如何在弹出窗口中按下按钮时在我的javascript文件中运行函数
- 获取对在 JavaScript 中运行函数的对象的引用
- 运行函数时出错
- 节点.js子进程中的运行函数
- $.getJSON 在返回数据后不会运行函数
- 如果onchange为true,如何运行函数