$ .ajax()成功不会运行函数

时间:2013-09-18 21:41:56

标签: javascript ajax jquery

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

6 个答案:

答案 0 :(得分:5)

在您的第二个示例中,除非您从服务器成功回拨,否则不会发生任何事情。添加一个错误回调,正如许多人建议的那样,确实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跟踪错误。

答案 1 :(得分: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)。

您的第二个示例是正确的。如果您在第二个示例中没有看到警报,则表示ajax电话未成功完成。添加error回调以查看原因。

答案 2 :(得分:0)

您可能想尝试使用承诺:

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调用在线程中稍后返回时(或者更准确地说,在响应返回时启动的新线程中),将其指定为执行某些操作。

答案 3 :(得分:0)

在第一种情况下,运行$ .ajax时,window.alert会立即执行 在第二个它只在你收到服务器的答案时运行,所以我怀疑你的ajax请求有什么问题

答案 4 :(得分:0)

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

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

我猜数据类型不匹配或类似。

答案 5 :(得分:0)

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