web-gelistirme-sc.com

URL Bir AJAX isteği için jQuery'deki bir dizgiyi kodlayın

Google'ın Hızlı Arama'yı uygulamamda uyguluyorum. Metin girişindeki kullanıcı yazarken HTTP isteklerini kapatmak istiyorum. Karşılaştığım tek sorun, kullanıcı ad ve soyad arasında bir boşluğa ulaştığında, alanın + olarak kodlanmaması ve bu nedenle aramanın kesilmesidir. Boşlukları + ile nasıl değiştirebilirim, ya da sadece URL'yi güvenle kodla.

$("#search").keypress(function(){       
    var query = "{% url accounts.views.instasearch  %}?q=" + $('#tags').val();
    var options = {};
    $("#results").html(ajax_load).load(query);
});
203
Brian D

Deneyin encodeURIComponent .

Belirli karakterlerin her bir örneğini, karakterin UTF-8 kodlamasını temsil eden bir, iki, üç veya dört kaçış dizisi ile değiştirerek bir Tekdüzen Kaynak Tanımlayıcı (URI) bileşenini kodlar (yalnızca iki "vekilden oluşan karakterler için dört kaçış dizisi olacaktır) "karakterler).

Örnek:

var encoded = encodeURIComponent(str);
468

encodeURIComponent benim için iyi çalışıyor. url'i ajax çağrısında bu şekilde verebiliriz. Aşağıda gösterilen kod:

  $.ajax({
    cache: false,
    type: "POST",
    url: "http://atandra.mivamerchantdev.com//mm5/json.mvc?Store_Code=ATA&Function=Module&Module_Code=thub_connector&Module_Function=THUB_Request",
    data: "strChannelName=" + $('#txtupdstorename').val() + "&ServiceUrl=" + encodeURIComponent($('#txtupdserviceurl').val()),
    dataType: "HTML",
    success: function (data) {
    },
    error: function (xhr, ajaxOptions, thrownError) {
    }
  });
21
Praveen04

Daha iyi yol:

encodeURIComponent , aşağıdakiler dışındaki tüm karakterlerden kaçar: alphabetic, decimal digits, - _ . ! ~ * ' ( )

Sunucuya beklenmeyen isteklerden kaçınmak için, bir URI'nin parçası olarak iletilecek olan kullanıcı tarafından girilen parametreler üzerinde encodeURIComponent'i çağırmalısınız. Örneğin, bir kullanıcı değişken yorum için "Thyme & time = again" yazabilir. Bu değişkende encodeURIComponent kullanılmaması yorum verecektir = Thyme% 20 & time = again. Ve işareti ve eşittir işareti yeni bir anahtar ve değer çifti işaretleyin. Bu nedenle, "Kekik & zaman = tekrar" değerine eşit bir POST yorum anahtarına sahip olmak yerine, biri "Kekik" e ve diğerine (zamana) eşit olan iki POST anahtarınız vardır.

/ X-www-form-urlencoded (POST) başvurusu için http://www.w3.org/TR/html401/interac...m-content-type boşluklar '+' ile değiştirilecektir, bu nedenle "% 20" ekinin "+" ile ek olarak değiştirilmesi ile bir encodeURIComponent değişiminin takip edilmesi istenebilir.

Eğer RFC 3986'ya (ki,!, ', (,) Ve *) uyulması daha katı olmak isterse, bu karakterlerin resmileştirilmiş URI sınırlandırması kullanmamasına rağmen, aşağıdakiler güvenle kullanılabilir:

function fixedEncodeURIComponent (str) {
  return encodeURIComponent(str).replace(/[!'()]/g, escape).replace(/\*/g, "%2A");
}
8
StackOverFlow

MVC3/EntityFramework'u arka uç olarak kullanıyorum, ön uç tüm proje denetleyicilerimi jquery ile tüketiyor, doğrudan gönderme ($ .post kullanarak), URL kodlu koddan başka bir şekilde doğrudan paragraflar ilettiğinizde veri tanımlamayı gerektirmiyor. Hatta zaten bir URL gönderdiğim birkaç karakter test ettim (bu bir http://www.ihackforfun.eu/index.php?title=update-on-url-crazy&more=1&c=1&tb=1&pb=1 =) bir parametre olarak ve URL içinde tüm verileri ilettiğinizde encodeURIComponent harika çalışıyor olsa da hiç sorun yaşamadım

Kodlanmış URL, yani

 var encodedName = encodeURIComponent(name);
 var url = "ControllerName/ActionName/" + encodedName + "/" + keyword + "/" + description + "/" + linkUrl + "/" + includeMetrics + "/" + typeTask + "/" + project + "/" + userCreated + "/" + userModified + "/" + status + "/" + parent;; // + name + "/" + keyword + "/" + description + "/" + linkUrl + "/" + includeMetrics + "/" + typeTask + "/" + project + "/" + userCreated + "/" + userModified + "/" + status + "/" + parent;

Aksi takdirde encodeURIComponent kullanmayın ve bunun yerine paragrafları ajax post yönteminde geçirmeyi deneyin

 var url = "ControllerName/ActionName/";   
 $.post(url,
        { name: nameVal, fkKeyword: keyword, description: descriptionVal, linkUrl: linkUrlVal, includeMetrics: includeMetricsVal, FKTypeTask: typeTask, FKProject: project, FKUserCreated: userCreated, FKUserModified: userModified, FKStatus: status, FKParent: parent },
 function (data) {.......});
4
d1jhoni1b

bunu dene

var query = "{% url accounts.views.instasearch  %}?q=" + $('#tags').val().replace(/ /g, '+');
0
genesis