eroare functia ajaxSend - Uncaught TypeError

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

eroare functia ajaxSend - Uncaught TypeError

Salut,
Pe local merge ajaxSend, dar pe server cind apelez functia ajaxSend() (cu obiect javascript) imi da eroarea:

Cod: Selectaţi tot

Uncaught TypeError: data[k].replace is not a function ajax.js:7
Care sa fie cauza? Cred ca e de la server dar nu stiu ce. Multumesc.

MarPlo Mesaje: 4343
Salut
Nu stiu daca e de la sever. In general, erorile din javascript (din browser) nu au legatura cu configuratia serverului.
Posibil sa fie ceva la datele din obiectul transmis la ajaxSend.
Pentru rezolvare ar fi de folos sa pui codul js si acel obiect.

andras Mesaje: 430
Se poate vedea pe serverul developper superbit.ro:1003/cms/ => oricare optiune din meniu (preferabil Proiecte ca e mai scurt) => Add => si se adauga orice date (e numai test), chiar si spatii => Save si se vede eroarea in Inspect element. Am testat in Opera. In Modzilla la apasare pe Add imi da eroarea ReferenceError: my_ajax3maa is not defined, desi functia exista in functii.js.

MarPlo Mesaje: 4343
Nu imi dau seama care e problema, e ceva la datele din parametrul 'data'. In functia ajaxSend(), unde e:

Cod: Selectaţi tot

//alert(data);
Pune acest cod si vezi ce arata in consola:

Cod: Selectaţi tot

console.log(data);

andras Mesaje: 430
Am pus console.log(data); si imi afiseaza obiect js cu date de test:

Cod: Selectaţi tot

beneficiar: "test beneficiar"
clasa: "Proiecte"
datainc: "test data"
datasfi: "test data"
denumire: "test denumire"
id: 0
numeid: "proiect_id"
stare: "test stare"
tabela: "proiecte"
Sint datele pe care ma astept sa fie preluate in obiect js data si apoi preluate cu POST in ajax.

- Edit:
Cred ca am gasit problema: in obiectul js data exista o variabila numerica $id: 0 pe care functia replace n-o poate trata. O sa modific.

MarPlo Mesaje: 4343
Daca pui acel numar ca sir, adica: '0', e posibil sa-l recunoasca.
In php:

Cod: Selectaţi tot

$id =0;
$arr["'". $id ."'"] ='ceva';
In JS:

Cod: Selectaţi tot

var id =0;
var obj ={};
obj["'"+ id +"'"] ='ceva';

andras Mesaje: 430
L-am pus ca sir si acum functioneaza. Multumesc!

MarPlo Mesaje: 4343
Ma bucur. Am modificat in functia ajaxSend() ca sa functioneze bine si cu key /valori numerice fara sa fie necesare alte conversii.
Asta e functia in noua versiune.

Cod: Selectaţi tot

/* Ajax Function
 Send "data" to "php", using the method added to "via", and pass response to "callback" function
 data - json object with data to send, name:value; ex.: {"name1":"val1", "name2":"2"}
 php - address of the php file where data is send
 via - request method, a string: 'post', or 'get'
 callback - function called to proccess the server response
*/
function ajaxSend(url, data, via, callback){
  var obajx =  (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');  // XMLHttpRequest object

  //put data from "data" into a string to be send to "php"
  var str_data ='';
  for(var k in data){
    k = k.toString();  //convert numeric key to string

    //build the string with data to be sent
    str_data += k +'='+ data[k].toString().replace(/\?/g, '%3F').replace(/=/g, '%3D').replace(/&/g, '%26').replace(/[ ]+/g, '%20').replace(/[\+]/g, '%2B') +'&';
  }
  str_data = str_data.replace(/&$/, '');  //delete ending &

  //send data to php
  obajx.open(via, url, true);
  if(via =='post') obajx.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
  obajx.send(str_data);

  //check the state request, if completed, pass the response to callback function
  obajx.onreadystatechange = function(){
    if(obajx.readyState == 4){
/// alert(obajx.responseText);  //for debug
      callback(obajx.responseText);
    }
  }
}

andras Mesaje: 430
Am inlocuit-o si a mers din prima.

Subiecte similare