BelenosMedlem sedan mars 201077 inlägg Min eviga fråga och jag kan inte begripa varför jag inte får detta att fungera, sen plötsligt funkar det och då vet jag aldrig vad jag gjorde. Snälla hjälp mig, varför funkar inte detta:
Jag har lagt ett antal knappar med class: .button i en <tabell> med class toolbar. När jag lägger till en alert(str) så finns all data i javascriptet. Sen kommer det eviga strulet $_POST[].
Och jag får hela tiden felmeddelande: ”Notice: Undefined index: onclick in C:\wamp\www\builder\index.php”
Försök 1.
var str =””;
$(".button").click(function(){ str = $(this).attr("id")});
$(".toolbar").click(function(){
$.ajax({
type: "POST",
url: "index.php",
data: {'onclick': str},
dataType: "json", //har även försökt med ‘text’
success: function(data){
alert(data.set);
}
});
});
});
Försök 2.
$(".button").click(function(){$.post("script/wysiwyg.php", {'onclick': $(this).attr("id")})});
Mottagning.
$set = $_POST['onclick'];
echo json_encode($set);
Är det något strul med coden, Notepad++ eller vad f..n är det?
Format är inställd på ANSI. men jag har provat UTF8 utan BOM
Det finns två möjliga felkällor här.
- Av någon anledning kommer datat inte fram till PHP-skriptet.
- Det som skickas tillbaka är inte giltigt JSON-formaterat. Då vägrar jQuery att success eftersom det har skett ett fel.
Jag vet inte varför nummer 1 skulle hända i ditt fall. Däremot kanske det är så att str aldrig sätts, så att det sker ett fel innan requesten alls skickas.
Nummer 2 kan ju ske, särskilt om du får ett PHP-fel. Jag rekommenderar att du även skapar en felhanterare, så du ser vad jQuery håller på med.
error: function(obj,str,err){
alert("Error: " + str + "\n\n" + err + "\n\nResponse text:\n" + obj.responseText);
}
Responstexten hittar du även utvecklarverktygen som finns i de flesta webbläsare.
På PHP-sidan av saker och ting kan det hjälpa att skriva ut vad $_GET och $_POST innehåller.
print_r($_GET);
print_r($_POST);
Lycka till.
BelenosMedlem sedan mars 201077 inlägg Vart ska jag lägga error: function? Har provat både fritt och som en sucsess function utan att det ger någon alert.
Har även provat (se nedan) i php-delen!
if (isset($_POST ['onclick']))
echo $_POST ['onclick'];
else
echo 'Bullskit' ;
Det blev Bullskit av allt! ;)
Jag begriper ingenting, finns det inställningar i wamp eller något annat hinder? Jag har programmerat detta tidigare och det funkar tillslut, men aldrig från början! :bla
Det ska va kul att programmera!
Den ska ligga efter success. (Ja eller varsomhelst inom smma scope.) Glöm inte det extra kommatecknet du måste lägga till.
type: "POST",
url: "index.php",
data: {'onclick': str},
dataType: "json",
success: function(data){
alert(data.set);
}, // <- Den rackarn
error: function(obj,str,err){
alert("Error: " + str + "\n\n" + err + "\n\nResponse text:\n" + obj.responseText);
}
Men se till att alltid ha developer tools öppet. Ctrl+skift+I eller F12 i Chrome, eller ctrl+skift+J för att komma till JS-konsolen. Byt ut ctrl mot cmd på Mac. F12 eller B i Firefox. Där måste du installera Firebug separat. Gå till tabben console, så ser du alltid eventuella JS-fel när sidan laddas. En annan bra tabb är network, där du kan se lla individuella http-anrop, inklusive innehållet i request och response genom att klicka på ett specifikt anrop.
Nate.AMedlem sedan mars 2006296 inlägg Hej!
Har du provat att ta bort singel-fnuttarna runt onclick? Se ex: http://api.jquery.com/jQuery.post/
$(".button").click(function(){$.post("script/wysiwyg.php", {onclick: $(this).attr("id")})});
Jag antar att id't du skickar är en vanlig sträng? Då behöver du inte använda json_encode här.
Mottagning.
$set = $_POST['onclick'];
echo json_encode($set);
Like the reference JSON encoder, json_encode() will generate JSON that is a simple value (that is, neither an object nor an array) if given a string, integer, float or boolean as an input value. While most decoders will accept these values as valid JSON, some may not, as the specification is ambiguous on this point.
http://php.net/manual/en/function.json-encode.php
Nate: Fnuttarna gör ingen skillnad i detta fall. Om attributets namn innehåller tecken som inte får finnas i variabelnamn i JS så måste du använda fnuttar, men i övrigt är det valfritt och gör ingen skillnad utöver att du slösar två tecken.
Och vad gäller json_encode, du läser texten fel. json_encode("test") returnerar "test" dvs en sträng med fnuttar runt. Om du inte anropar json_decode så får du bara test utan fnuttar om du inte placerar fnuttar där själv. Vad texten handlar om är ett en ensam sträng i strikt mening inte är giltig JSON eftersom du "egentligen" behöver definiera ett moderobjekt, t ex {property:"value"}
jQuery klarar av att tolka denna ensamma sträng om JSON, men däremot måste du använda alert(data); istället för alert(data.set); eller något annat. data motsvarar normalt rot-objektet, dvs de yttersta { och } i mitt exempel i förra stycket, så då skulle du kunna göra alert(data.property). Men i detta fall är alltså data direkt en sträng.
Bakgrund: JSON består av data kodat i samma format som JS-kod. Dvs, {} blir till ett object medan "" blir till en sträng.
Nate.AMedlem sedan mars 2006296 inlägg Aha, så har man lärt sig något nytt idag. :)
BelenosMedlem sedan mars 201077 inlägg Har testat alla tipps och kört Firebug men hittar inga fel!
Finns det något annat sätt att skicka data mellan javascript och php cod?
Ska tillägga att json bara va ett sätt att se om data skickades rätt!
vad få du i firebug när du kör console.log(data) ?
BelenosMedlem sedan mars 201077 inlägg Hur gör jag då?
Skriver jag så i javascriptet?
BelenosMedlem sedan mars 201077 inlägg Den här är röd i loggen:
Teckenkodningen för HTML-dokumentet var inte deklarerad. Dokumentet kommer att visas med förvrängd text i vissa webbläsarkonfigurationer om dokumentet tecken som ligger utanför US-ASCII-området. Teckenkodningen för filen måste deklareras i transportprotokollet eller så måste filen använda en byte order mark som kodningssignatur.
BelenosMedlem sedan mars 201077 inlägg Problemet var att det inte kom någon data till $_POST[] vid uppstart!
Löses med: @
$set = @$_POST['onclick'];
Jester73Medlem sedan mars 2012121 inlägg Ja/Nej knapp newbiefråga
Jamendethärblevjuheltfel....Sorry