Parsererror trimitere date cu Ajax si htaccess

Discutii si intrebari legate de scripturi si functii JavaScript, jQuery si Ajax, cod JavaScript in general.
Stefan
Mesaje:117

Parsererror trimitere date cu Ajax si htaccess

Salut, am un script pentru un calendar, dar se pare ca atunci cand vreau sa trimit date prin ajax primesc eroarea din titlu fiindca am modificat url-ul prin htaccess. Am pus codul intr un proiect de test fara sa modific url-ul si asa functioneaza, cum as putea modifica codul astfel incat sa accepte mai multi parametri pentru pagina "filme".
Am observat ca nu se intra in "success" dar datele se adauga in baza

Am incercat sa adaug codul urmator doar pentru pagina "filme" dar se pare ca nu functioneaza

Cod: Selectaţi tot

RewriteRule ^(filme)(\?)(.*)$ index.php?view=filme&$3 [NC,L,QSA]
.htaccess original

Cod: Selectaţi tot

RewriteRule ^([a-zA-z0-9-]+)(\/)?(?(2)([0-9]+))$ index.php?view=$1&id=$3 [NC,L]
Ajax

Cod: Selectaţi tot

function doSubmit(){
           $("#createEventModal").modal('hide');
           var title = $('#title').val();
           var startTime = $('#startTime').val();
           var endTime = $('#endTime').val();
           
           $.ajax({
               url: 'filme',
               data: 'action=add&title='+title+'&start='+startTime+'&end='+endTime,
			   datatype: "json",
               type: "POST",
				error: function(xhr, status, error) {
					alert(status);
					alert(xhr.responseText);
				},
               success: function(json) {
                   $("#calendar").fullCalendar('renderEvent',
                   {
                       id: json.id,
                       title: title,
                       start: startTime,
                       end: endTime,
                   },
                   true);
				   alert(title + ' - ' + startTime + ' - ' + endTime + ' - ' + json.id);
               }
           });
           
       }
cod php

Cod: Selectaţi tot

if($_POST['action'] == "add")
    {
        mysqli_query($con, "INSERT INTO `filme` (
                    `title` ,
                    `start` ,
                    `end`
                    )
                    VALUES (
                    '".mysqli_real_escape_string($con, $_POST["title"])."',
                    '".mysqli_real_escape_string($con, date('Y-m-d H:i:s',strtotime($_POST["start"])))."',
                    '".mysqli_real_escape_string($con, date('Y-m-d H:i:s',strtotime($_POST["end"])))."'
                    )");
        header('Content-Type: application/json');
		
        die(json_encode(mysqli_insert_id($con)));
        exit;
    }

MarPlo
Salut,
Datele trimise prin POST la server nu au treaba cu parametrii din adresa URL, cei dupa "?", deci nu se face regula in htaccess pt. ele.
Incearca sa pui regula cu "filme" inainte de cealalta.
Daca regula initiala din htaccess functioneaza pentru ce ai in site, dar incurca legatura cu "filme", poti sa excluzi "filme" din acea regula:

Cod: Selectaţi tot

RewriteRule ^(filme)(\?)(.*)$ index.php?view=filme&$3 [NC,L]
RewriteRule ^(?!filme)([a-zA-z0-9-]+)(\/)?(?(2)([0-9]+))$ index.php?view=$1&id=$3 [NC,L]
Sau, si mai simnplu, fara complicatii, pui in codul ajax, la "url" adresa fisierului index.php.

Cod: Selectaţi tot

$.ajax({
  url: 'index.php',
  data: 'action=add&title='+title+'&start='+startTime+'&end='+endTime,

  //The rest of your code ...
});
In php:

Cod: Selectaţi tot

if(isset($_POST['action']) && $_POST['action'] =='add'){
  //The rest of your code ...
}

Stefan
Se pare ca daca pun direct la url "index.php" nici insert-ul nu se mai face in baza de date.. Nu inteleg de la ce ar putea fi

index.php

Cod: Selectaţi tot

<?php
include('../core/init.php');

if(!isset($_SESSION['admin']))
	include('pages/login.php');
else{
	if(isset($_GET['view']))
		switch($_GET['view']){
			.
			.
			.
			case 'filme':
				include('pages/filme.php');
				break;
				
			case 'premiera':
				include('pages/premiera.php');
				break;
				
			case 'bilete':
				include('pages/bilete.php');
				break;
				
			.
			.
			.
			default:
				include('pages/eroare.php');
				break;
		}
	else
		include('pages/dashboard.php');
}
?>

MarPlo
Codul php verifica $_GET["view']; asta inseamna ca cere 'view' in adresa URL.
Adauga '?view' la parametrul 'url' din ajax, cu valoarea pentru $_GET.

Cod: Selectaţi tot

$.ajax({
  url: 'index.php?view=filme',
 //etc..
});

Stefan
Am detaliat aici deoarece nu ma lasa sa introduc mai mult de 2 URL-uri:
pastebin.com/raw/phQSTXxM

MarPlo
Nu ai facut cum este indicat in raspunsul anterior.

In codul ajax, la parametrul 'url' se pune adresa fisierului impreuna cu parametri ceruti pentru $_GET in php.
In cazul tau, daca ai modificat "view" cu "test"; adresa 'url' din scriptul ajax ar veni asa:

Cod: Selectaţi tot

$.ajax({
  url: 'index.php?test=filme',  //Pentru $_GET
  data: 'action=add&title='+title+'&start='+startTime+'&end='+endTime, //Pentru $_POST
  type: POST,

 //The rest of your code..
});
Ca sa vezi ce date se primesc in php de la ajax, poti sa verifici cu acest cod:

Cod: Selectaţi tot

var_export($_GET);
echo 'Post:';
var_export($_POST);
Iar in codul ajax, la "succes" aplici: alert(json);

Si asa verifici si apoi faci sa se potriveasca ce adaugi in ajax cu cerintele din fisierul php.

Deci:
1. La adresa 'url' sa ai numele fisierului si ca parametri (nume=valoare) ce se cere pentru $_GET.
2. In ajax, daca "type" este POST, se adauga la 'data' datele pentru $_POST.
3. Faci verificari cu var_export() si modifici pana obtii ce vrei.
4. Ca sa nu afecteze ceva din htaccess, incerci scriptul fara el.

Stefan
Ba da, am fost trimis datele cum s-a zis si la raspunsul anterior si tot nimic, nu inteleg

Subiecte similare