2016-09-26 25 views
1

我正在使用jQuery通过注册提交事件监听器来发布和插入一行记录到表体的末尾。这里是提琴:https://jsfiddle.net/8jew8kk7/4/

$("form").submit(function(event) { 
    event.preventDefault() 

    jx = $.post('data.asp', 'action=add&' + $(this).serialize()) 
    console.log("jx=" + jx.status) 
    if (jx.status == 404) { 
    alert("404 not found") 
    return false 
    } 
    tdstring = "<tr><td>" + $("input[name='pkeyEmployeeID']").val() + "</td><td>" + $("input[name='strFirstName']").val() + "</td><td>" + $("input[name='strLastName']").val() + "</td><td>" + $("input[name='dtmBirthDate']").val() + "</td><td>" + $("input[name='strHomePhone']").val() + "</td>" 
    delstring = '<td><button type="button" name="action" value="del" onclick="del(this)" fid="' + $("input[name='pkeyEmployeeID']").val() + '">add</button></td></tr>' 
    $(this).find('tbody').append($(tdstring + delstring).hide().fadeIn('normal')) 
}) 

jx.status总是undefined,同时运行。在Chrome控制台中执行x=$.post('data.asp').status时,我可以完全得到服务器返回的代码。这段代码是否有缺陷?

+0

尝试改变输入[名称= 'pkeyEmployeeID' 输入[名称= 'pkeyEmployeeID']首先在字符串 –

+0

@ABUdhay谢谢指出。我应该补充一点。 –

回答

1

由于您的代码异步运行console.log("jx= " + jx.status)在ajax请求完成之前运行,因此不存在statusfor jx对象之类的事情,因此它返回undefined。为了使用它,请在.always()函数内运行它。你也需要这样的$("input[name='pkeyEmployeeID']")使用选择,而不是$("input[name='pkeyEmployeeID'")

jx.always(function(){ 
    alert(jx.status) 
    if (jx.status == 404) { 
     alert("404 not found") 
     return false 
    } 

    }) 

JSFIDDLE

1

jQuery.post(或$。员额)方法返回一个承诺对象。所以如果你想从jqXHR获取数据,你必须从promise(),always()或fail()方法中得到它。

jx = $.post('data.asp', 'action=add&' + $(this).serialize()) 
jx.always(function(data, textStatus, jqXHR){ 
    if(jqXHR.status == 200) 
    //your code here 
}) 

的jqXHR对象由$。阿贾克斯()在jQuery 1.5履行承诺的界面的返回,给他们所有的属性,方法和承诺的行为(更多信息请参见Deferred对象)。这些方法接受一个或多个在$ .ajax()请求终止时调用的函数参数。这允许您在单个请求上分配多个回调,甚至可以在请求完成后分配回调。 (如果请求已经完成,回调被立即解雇。)

http://api.jquery.com/jQuery.ajax/#jqXHR

演示:https://jsfiddle.net/8jew8kk7/14/

相关问题