2017-09-03 9 views
1

から/devices/trucksへの変更方法はからurlに変更できますか?私はchanのオートコンプリートのソースを変更しますが、原則として、コールバックを重複しないようにします。コールバックで使用する場合のajax URLの変更方法

$(function(){ 
    $("#autofield").autocomplete({ 
     source: function(request, response) { 
      $.ajax({ 
       dataType: "json", 
       url: "/devices/cars", 
       data: {term:request.term, type:'all', fields:['id','name']}, 
       success: function(json) { 
        var data=[]; 
        for (var i = 0; i < json.length; i++) { 
         data.push({id:json[i].id,label:json[i].name}); 
        } 
        response(data); 
       } 
      }); 
     }, 
     minLength: 2, 
     select: function(event, ui) { 
      $(this).parent().find("input[name='itemId']").val(ui.item.id); 
     } 
    }); 

    $("#changeUrl").click(function() { 
     //Change url from /devices/cars to /devices/trucks 
     $("#autofield").val('').autocomplete("option", "source", function(request, response) { 
      $.ajax({ 
       dataType: "json", 
       url: "/devices/trucks", 
       data: {term:request.term, type:'all', fields:['id','name']}, 
       success: function(json) { 
        var data=[]; 
        for (var i = 0; i < json.length; i++) { 
         data.push({id:json[i].id,label:json[i].name}); 
        } 
        response(data); 
       } 
      }); 
     }); 
    }); 
}); 
+0

実行時に変更したいと思っていますか? –

+0

@ArupRakshitページの読み込み後に変更します。 – user1032531

答えて

1

最も簡単な方法は、あなたの質問を誤解していない限り、あなたのURLになる変数を作成することです。

var dynamicUrl = "/devices/cars"; 

$("#changeUrl").click(function() { 
    dynamicUrl.val(dynamicUrl.val() == '/devices/cars' ? '/devices/trucks' : '/devices/cars'); 
}); 

$.ajax({ 
... 
    url: dynamicUrl, 
... 
+0

このように 'dynamicUrl'を参照することはできません。 – user1032531

+0

@ user1032531どうしてですか?私はちょうどajax呼び出しをテストし、あなたは最も確実に文字列の代わりにurlパラメータに変数を渡すことができます。 – moidol

+0

はい、できるajax部分はありますが、オートコンプリートのクロージャが問題を引き起こしています。 – user1032531

0

ここでは、配列インデックスに基づいてURLを変更する方法があります。
これにより、必要な数のURLを使用できます。

以前のインスタンスを破棄して、新しいURLで再インスタンス化する必要があることに注意してください。

$(function(){ 

    var ajaxURLs = ["/devices/cars","/devices/trucks", "/devices/planes", "/devices/boats" ]; 

    var usedURL = 0; // The array index. 

    function autoCompleteInit(){ 
     $("#autofield").autocomplete({ 
      source: function(request, response) { 
       $.ajax({ 
        dataType: "json", 
        url: ajaxURLs[usedURL], 
        data: {term:request.term, type:'all', fields:['id','name']}, 
        success: function(json) { 
         var data=[]; 
         for (var i = 0; i < json.length; i++) { 
          data.push({id:json[i].id,label:json[i].name}); 
         } 
         response(data); 
        } 
       }); 
      }, 
      minLength: 2, 
      select: function(event, ui) { 
       $(this).parent().find("input[name='itemId']").val(ui.item.id); 
      } 
     }); 
    } 

    // On load init 
    autoCompleteInit(); 

    // Change handler 
    $("#changeUrl").click(function() { 
     //Change URL to the next URL in array 

     usedURL++; 

     // Back to first URL if cycled throught all URL 
     if(usedURL > ajaxURLs.length-1){ 
      usedURL = 0; 
     } 

     // Destroy previous autocomplete instance ans re-initialise it with the new URL. 
     $("#autofield").autocomplete("destroy"); 
     autoCompleteInit(); 
    }); 
}); 
+0

私は毎回再適用することができますが、より正確にすることが可能であるように思えます。 – user1032531

+0

私はあなたがそこに何を意味するのかわかりません... –

+0

以前の自動完成インスタンスを破壊する代わりに、新しいURLでそれを再初期化します。たぶんできないかもしれません。 – user1032531

0

Ajax呼び出しを含む関数を作成し、url(または接頭辞)を引数として渡します。 Like getDevices(url)

関連する問題