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);
});
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);
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) {
}
});
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");
}
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) {.......});
bunu dene
var query = "{% url accounts.views.instasearch %}?q=" + $('#tags').val().replace(/ /g, '+');