JQuery escape characters in zoekfunctie

Status
Niet open voor verdere reacties.

blackeagle67

Gebruiker
Lid geworden
13 okt 2009
Berichten
158
Hallo mensen,

ik heb een vraagje aan jullie.
Ik heb een JQuery zoekfunctie in een product overzicht gebouwd en zou eigenlijk graag speciale karakters die in dit veld worden ingevoerd escapen.

Ik heb al veel geprobeerd maar kan zo geen oplossing vinden.

Code:

HTML:
$('#zoek_productnaam').keyup(function() {
if($("#zoek_productnaam").val().length > "2")
{	
	var input = $("#zoek_productnaam").val();
		loader();
		$.post("url", {
			product:input,
			productnr:true
			} ,function(data)
			{
				if(data)
				{
				$("#producten").css({'text-align':'left'}).html(data);
				}
		});
}
else if($("#zoek_productnaam").val().length == "0")
{
	loader();
	$.post("url",{
		laad:true
		} ,function(data)
		{
			if(data)
			{
			$("#producten").css({'text-align':'left'}).html(data);
			}
	});
}
});

Zoals je kunt zien heb ik hier dus nog geen escaping in zitten.
Elke keer als ik iets probeer geeft jquery.js een fout aan.
De standaard javascript escape bijvoorbeeld geeft ook fouten.

Hebben jullie zo een goede functie voor mij die dit kan ondervangen.

Ik heb het over karakters als ( ) [ ] * + $ ' " etc.
Eigenlijk alle karakters.
 
Ik heb de oplossing al gevonden.
Schijnbaar had ik mijn karakters niet op de juiste manier met de .replace ge-escaped en had er daarom moeite mee.

Nu heb ik hem werkend dus voor degenen:
HTML:
var input = $("#zoek_productnaam").val().replace(/'/g, "\\'").replace(/"/g, "\\\"").replace(/\(/g, "\\(").replace(/\)/g, "\\)").replace(/\[/g, "\\[").replace(/\]/g, "\\]").replace(/\+/g, "\\+").replace(/\*/g, "\\*").replace(/\$/g, "\\$").replace(/\//g, "\\/").replace(/\\/g, "\\\\");
 
Laatst bewerkt:
Hé wat ik voorheen in deze thread had geplaatst werkt correct maar perfectionistisch als ik ben heb ik nog een error waar in vanaf wil.
De error onderbreekt het zoeken niet maar staat wel in de console van google chrome.
De error: Uncaught SyntaxError: Unexpected token ILLEGAL.

Weten jullie hoe ik hier vanaf kan komen?
 
En eh, waar precies is deze error? Op welke regel? Kan je even de +- 10 regels rondom posten?
 
dat is het leuke. Jquery.js regel 32.

Versie 1.4.4 al ge-update maar niets helpt nog.

XHR finished loading: "Paginawelketabelgenereerd".
jquery.js:32Uncaught SyntaxError: Unexpected token ILLEGAL.

Bedankt voor de moeite.
 
Ha. Dat's een leuke. Bewijs dat jQuery echt super slecht is omg bbq. Dit is dus onzin. Maar het bewijst wel mn grootste probleem met jsLib's: mensen hebben geen flauw idee meer waar ze mee bezig zijn.

Anyway, dit is een 'error' die voorkomt als je een XMLHttpRequest data laat ophalen welke geen XML is (ja, daar komt de naam dus ook vandaan). XHR.

De oplossing is om een correct mimeType mee te geven aan je request. Dus, zoiets:
[JS]var xhttp = new XMLHttpRequest();

xhttp.overrideMimeType('text/plain'); // alleen Gecko en Webkit kan hier iets mee
// text/plain als je random data oppakt, maar dingen als application/json of text/html kan ook

xhttp.open(...);[/JS]Dus, je moet eerst kijken of je browser er mee om kan gaan (tenminste, als je wilt dat andere browsers niet een 'omg ik ken overrideMimeType niet' geven):
[JS]if(xhttp.overrideMimeType)
{
xhttp.overrideMimeType(...);
}[/JS]Als je binary data gaat halen, voeg ook een charset toe:[js]xhttp.overrideMimeType('application/octet-stream;charset=x-user-defined'); // oid[/js]
 
Laatst bewerkt:
He bedankt voor je reactie zal het maandag eens proberen.

BTW voor je witte tekst. Ik heb al geprobeerd headers mee te geven maar het wilde niet lukken en door het vele proberen heb ik mijn eigen conclusie getrokken dat het zou moeten liggen aan het antwoord dat gegeven word. Omdat de post wel lukt maar daarna pas de error optreed.

Ik zou verwachten dat als het aan de request zou liggen de error voor de succesvolle post zou optreden.
Omdat dit dus niet gebeurt zou ik denken dat het aan het antwoord ligt.

Om deze reden en vooral om content-type fouten heb ik php headers aan het antwoord document meegegeven maar dit hielp alleen voor speciale tekens.

Maar idd alleen webkit geeft deze error, IE en firefox vinden het geen probleem.
 
Hoi blackeagle67,


Mn witte text was vooral niet persoonlijk, ik erger me alleen aan mensen die 'alleen' jQuery kunnen en geen flauw idee hebben hoe ze de simpelste js functie kunnen maken. Zoals je zelf zei, je hebt al zelf lopen klooien, dus je moet je vooral niet aangesproken voelen.


In ieder geval:

mijn eigen conclusie getrokken dat het zou moeten liggen aan het antwoord dat gegeven word
Omdat de post wel lukt maar daarna pas de error optreed.
Well, dat klinkt logisch genoeg. Wat je eens moet doen is wat alertjes toevoegen in de code, bijvoorbeeld net VOOR het request gemaakt wordt, en net voordat je een readyState van 4 krijgt. Ik weet niet of dit kan in jQuery though.

Heb je toevallig een demo-pagina ergens, of anders een zip/post met (meer) voorbeeld code? Hoe ziet precies je response van je POST eruit?
Om deze reden en vooral om content-type fouten heb ik php headers aan het antwoord document meegegeven maar dit hielp alleen voor speciale tekens.
De 'unexpected token' is denk ik eigenlijk een pointer naar een parser-fout, ie, als je zoeits als antwoord geeft (XML, sic):[XML]<root>
<child>
wasd
</child>
>test>[/XML]waar er dus een verkeerd character staat op de laatste regel.

Ik moet eerlijk zeggen dat ik zelf nooit echt een POST maak met xhttp. Het rare is dat die error eigenlijk helemaal niet voor zou kunnen komen, omdat je in principe helemaal geen data received, maar alleen POST.

Als ik bij de jQuery.post kijk staat dit bij de 'success' callback:
success(data, textStatus, XMLHttpRequest)A callback function that is executed if the request succeeds.
Wat zit er in de 'data'? Is dat de data die je zelf hebt gestuurd?



:thumb:
 

Die had ik ook gezien. Was alleen de json_decode in php vergeten zo achteraf gezien >_<

Het productoverzicht waar dit geimplementeerd staat is het het CMS van Webprodie.nl gebouwd, ik kan dus niets zo online zetten.

Maar zoals ik al zei ik kijk er maandag weer naar hoewel je suggesties mij ook weer doen trappelen van enthousiasme om dit op te lossen kan ik ook niet zomaar thuis met dreamweaver ff gaan intappen op de server.

Vorige post:

Het vervelende is dat ik met post ook nog niet alles ontdekt heb.
Debuggen doet echt vreemd af en toe in Chrome.
Zoals nu thuis kan ik de post naar de pagina niet zien >_<
Maar dat terzijde.

De data die ik terug krijg is een gigantische tabel met gegevens, js voor navigatie en de navigatie zelf + links in de tabel etc.

De fout nogeens uitgebreid:

c.b.extend.globalEval jquery.js:32
Oa jquery.js:20
c.b.extend.each jquery.js:33
c.fn.extend.domManip jquery.js:120
c.fn.extend.append jquery.js:113
c.fn.extend.html jquery.js:117
$.post.laad index.php:368
c.extend.handleSuccess jquery.js:142
c.extend.ajax.L.w.onreadystatechange jquery.js:141

Maar om dus echt wat te kunnen uithalen moet ik dus weer op mn stage plek zitten.
 
Laatst bewerkt:
Request URL:
Request Method:POST
Status Code:200 OK
Request Headers
Accept:text/html, */*; q=0.01
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4
Connection:keep-alive
Content-Length:14
Content-Type:application/x-www-form-urlencoded
Cookie:;
PHPSESSID=
Host:
Origin:
Referer:
User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.237 Safari/534.10
X-Requested-With:XMLHttpRequest
Form Data
product:\(ku
Response Headers
Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:774
Content-Type:text/html; charset=iso-8859-1
Date:Mon, 24 Jan 2011 10:38:49 GMT
Expires:Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive:timeout=1, max=100
Pragma:no-cache
Server:Apache/2
Vary:Accept-Encoding

Dit zijn de headers van de post.
De waarde word momenteel nog ge-escaped met mijn replace reeks.

Heb de json encoding geprobeerd en geprobeerd op meerdere manieren te de-coden maar kom er zo nog niet achter waarom het met json niet werkt.
Hij geeft dan geen error. echo's geven de normale gegevens weer namelijk: \(ku.
Maar er word niet teruggegeven.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan