5

我的问题是关于$.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 是否正在运行,以便我可以function(){}在 $.ajax 成功运行时放入一些实际有用的代码。

4

6 回答 6

6

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

有助于跟踪错误的链接。

于 2013-09-18T21:46:57.237 回答
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返回值。alertundefined

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

于 2013-09-18T21:47:02.677 回答
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 调用在线程中稍后返回时(或者更准确地说,在响应返回时启动的新线程中)分配它来执行某些操作。

于 2013-09-18T21:45:13.417 回答
0

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

于 2013-09-18T21:47:30.193 回答
0

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

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

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

于 2013-09-18T21:51:16.323 回答
0

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

于 2013-09-18T21:56:36.637 回答