2017-01-04 14 views
0

AJAXリクエストの成功コールバックから返されるデータを入力値として設定したいとします。これは動作していません。これは、(.on)イベント関数内でAJAXリクエストを使用しているためです。私はAJAXリクエスト($ this)内のイベント関数を使用して、更新したい入力を見つける必要があります。ajax成功コールバックを入力値として設定する

$(function() { 
     $("table").on('change', '.master', function() { 
      $.ajax({ type: "POST", async: false, url: '<?php echo site_url('wordsuggestion'); ?>/hoi/nederlands/frans', success: function(data) { 
       $(this).parents('tr').find(".slave").val(data); 
      }}); 
     }); 
    }); 

これは私が使用している形式です。

<tr> 
       <td> 
        <div class="form-group"><input type="text" class="master" name="or[0]"></div> 
       </td> 
       <td>&nbsp;</td> 
       <td> 
        <div class="form-group"><input type="text" class="slave" name="tr[0]"></div> 
       </td> 
      </tr> 

これは働いていない理由は、私にとって謎です。私は、AJAXの呼び出しの中で、$(this)演算子はこれ以上使用できないので、入力が更新されないと考えています。

+1

これは実際にどのように失敗しますか? AJAXリクエストは作成されていますか?サーバーの応答は何ですか?何か間違いはありますか? – David

+0

@David AJAXリクエストは間違いなく作成されました。サーバーは、そのページのコンテンツ(この場合は7文字の単語)で応答します。エラーはありません。 –

答えて

2

thisは、AJAXコールバックの考え方を参照していません。そのコールバックのコンテキストは、すでに完了している元のchangeイベントハンドラのコンテキスト外です。

あなたは、$.ajax()呼び出しでこのような何かコンテキストを設定することができます。

$.ajax({ 
    context: this, 
    type: "POST", 
    // etc... 

あるいは単に変数に値を設定して、コールバックのため、その変数をキャプチャ:

var element = this; 
$.ajax({ 
    success: function (data) { 
     $(element).parents('tr').... 
    }, 
    // etc... 
1

てみてください

$(this).parents('tr').find(".slave").eq(0)