2016-09-26 6 views
1

私は、jQueryを使用して送信イベントリスナーを登録して、レコードの行をテーブル本体の最後に挿入しています。常に実行undefinedながら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:ここではフィドルです。 Chromeコンソールでx=$.post('data.asp').statusを実行すると、コードが正確に返されます。このスニペットに欠陥がありますか?

+0

入力に入力[名前= 'pkeyEmployeeID' を変更してみてください[名前]最初の文字列で –

+0

@ABUdhhh指摘のおかげで。私はこれを追加する必要があります。 –

答えて

1

コードが非同期に実行されるため、ajaxリクエストが完了する前にconsole.log("jx= " + jx.status)が実行されるため、statusfor jxオブジェクトなどが存在しないため、undefinedが返されます。それを使用するには、.always()の機能の中で実行してください。また、あなたは約束のオブジェクトを返す$("input[name='pkeyEmployeeID'")

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

    }) 

JSFIDDLE

1

jQuery.post(または$ .post)メソッドの代わりにこの$("input[name='pkeyEmployeeID']")のようなセレクタを使用する必要があります。したがって、jqXHRからデータを取得したい場合は、then()、always()またはpromise()の失敗()メソッドから取得する必要があります。

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約束のインターフェイスを実装すると$アヤックス()によって返されたオブジェクト。これらのメソッドは、$ .ajax()要求が終了したときに呼び出される1つ以上の関数引数をとります。これにより、1回のリクエストで複数のコールバックを割り当てたり、リクエストが完了した後にコールバックを割り当てることさえできます。 (リクエストがすでに完了している場合、コールバックはすぐに発射される。)

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

デモ:= 'pkeyEmployeeID' https://jsfiddle.net/8jew8kk7/14/

関連する問題