【问题标题】:$.ajax() success won't run function$.ajax() 成功不会运行函数
【发布时间】:2021-11-04 06:20:12
【问题描述】:

我的问题是关于$.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(){} 中放入一些实际有用的代码。

【问题讨论】:

  • “这行得通:” 不,不行。
  • 添加一个错误回调并给我们三个传入参数的值。
  • 你确定你没有在localhost上运行吗? 并且你确定调用的url(“/getCodes.php?etc..”)是正确的吗?
  • 我绝对在本地主机上运行。是的 getCodes.php 是正确的,我可以看到 getCodes.php 产生的变化。
  • 是 getCodes.php 返回有效的 json

标签: javascript ajax jquery


【解决方案1】:

在您的第二个示例中,除非您从服务器成功回调,否则不会发生任何事情。在这里添加一个错误回调,以查看 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');
    }       
});

Link 有助于追踪错误。

【讨论】:

  • 这行得通。我能够输出文本状态和错误消息,并得知 JSON 解析不正确。
【解决方案2】:

您的第一个示例无法证明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然后调用ajax发生success引用来自alert的返回值(其中大概是undefined)。

您的 second 示例是正确的。如果您在第二个示例中没有看到警报,则表示 ajax 调用未成功完成。添加一个error 回调来了解原因。

【讨论】:

  • var alertResult = window.alert("inside aJax statement"); 这不是函数处理程序。
  • @Saram:对。但它 OP 在他们的第一个示例中所做的。阅读答案,而不仅仅是代码块。
  • @juk:当然是这样:它的意思是:如果来自 OP 的第二个示例没有触发警报,则会发生错误。查看错误以找出原因。
  • 在没有作者输入的情况下,我们将得到尽可能接近的答案。
  • @T.j Crowder 不错!哈哈
【解决方案3】:

在第一种情况下,window.alert 在您运行 $.ajax 时立即执行 其次,它仅在您从服务器收到答案时运行,所以我怀疑您的 ajax 请求有问题

【讨论】:

  • 那不正确。 window.alert("inside aJax statement") 被执行之前 $.ajax 被调用。它在创建对象时执行。
【解决方案4】:

您可能想尝试使用承诺:

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 调用在线程中稍后返回时(或者更准确地说,在响应返回时启动的新线程中),您可以分配它来执行某些操作。

【讨论】:

  • 这仍然会失败,但至少它会声明它失败了。还包括失败的原因(传递给失败回调的三个参数)会很有用
  • @KevinB 这是正确的,但我怀疑他实际上并没有得到他认为他得到的回应。不过根据原帖,他还是想添加这种功能。
【解决方案5】:

我认为你做对了,但是你的请求没有成功。尝试添加错误处理程序:

error: function(){alert("Error");};

我猜 dataType 不匹配或类似的东西。

【讨论】:

    【解决方案6】:

    你的第二个例子是 100% 正确的。为什么它什么都不做?可能是因为ajax调用没有成功。 添加“错误”处理程序并使用浏览器的开发人员工具 -> 网络 -> XHR 检查您的 ajax 调用是否返回。这确实有助于处理损坏/不正确的 ajax 请求

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-13
      • 1970-01-01
      相关资源
      最近更新 更多