Απεγνωσμένο συντακτικό σφάλμα: :

Εκτελώ μια κλήση AJAX στο σενάριο MooTools, αυτό λειτουργεί μια χαρά στον Firefox, αλλά στον Chrome λαμβάνω ένα `Uncaught SyntaxError: Δεν μπορώ να προσδιορίσω το γιατί. Σχολιάζοντας τον κώδικα για να προσδιορίσω πού είναι ο κακός κώδικας δεν αποδίδει τίποτα, σκέφτομαι ότι μπορεί να υπάρχει πρόβλημα με το JSON που επιστρέφεται. Ελέγχοντας στην κονσόλα βλέπω ότι το JSON που επιστρέφεται είναι το εξής:

{"votes":47,"totalvotes":90}

Δεν βλέπω κανένα πρόβλημα με αυτό, γιατί να εμφανιστεί αυτό το σφάλμα;

vote.each(function(e){
  e.set('send', {
    onRequest : function(){
      spinner.show();
    },
    onComplete : function(){
      spinner.hide();
    },
    onSuccess : function(resp){
      var j = JSON.decode(resp);
      if (!j) return false;
      var restaurant = e.getParent('.restaurant');
      restaurant.getElements('.votes')[0].set('html', j.votes + " vote(s)");
      $$('#restaurants .restaurant').pop().set('html', "Total Votes: " + j.totalvotes);
      buildRestaurantGraphs();
    }
  });

  e.addEvent('submit', function(e){
    e.stop();
    this.send();
  });
});

Απλά μια πληροφορία για τους ανθρώπους που μπορεί να έχουν το ίδιο πρόβλημα - έπρεπε να κάνω τον διακομιστή μου να στείλει πίσω το JSON ως application/json και ο προεπιλεγμένος χειριστής jQuery λειτούργησε μια χαρά.

Σχόλια (6)

Αυτό μόλις μου συνέβη και ο λόγος δεν ήταν κανένας από τους παραπάνω λόγους. Χρησιμοποιούσα την εντολή getJSON της jQuery και πρόσθετα callback=? για να χρησιμοποιήσω JSONP (καθώς έπρεπε να πάω cross-domain), και επέστρεφα τον κωδικό JSON {"foo":"bar"} και έπαιρνα το σφάλμα.

Αυτό συμβαίνει επειδή θα έπρεπε να είχα συμπεριλάβει τα δεδομένα της επανάκλησης, κάτι σαν jQuery17209314005577471107_1335958194322({"foo":"bar"})

Εδώ είναι ο κώδικας PHP που χρησιμοποίησα για να το πετύχω αυτό, ο οποίος υποβαθμίζεται αν χρησιμοποιηθεί JSON (χωρίς callback):

$ret['foo'] = "bar";
finish();

function finish() {
    header("content-type:application/json");
    if ($_GET['callback']) {
        print $_GET['callback']."(";
    }
    print json_encode($GLOBALS['ret']);
    if ($_GET['callback']) {
        print ")";
    }
    exit; 
}

Ελπίζω ότι αυτό θα βοηθήσει κάποιον στο μέλλον.

Σχόλια (3)
Λύση

Μόλις έλυσα το πρόβλημα. Υπήρχε κάτι που προκαλούσε προβλήματα με μια τυπική κλήση Request, οπότε αυτός είναι ο κώδικας που χρησιμοποίησα αντ' αυτού:

vote.each(function(element){                
  element.addEvent('submit', function(e){
    e.stop();
    new Request.JSON({
      url : e.target.action, 
      onRequest : function(){
        spinner.show();
      },
      onComplete : function(){
        spinner.hide();
      },
      onSuccess : function(resp){
        var j = resp;
        if (!j) return false;
        var restaurant = element.getParent('.restaurant');
        restaurant.getElements('.votes')[0].set('html', j.votes + " vote(s)");
        $$('#restaurants .restaurant').pop().set('html', "Total Votes: " + j.totalvotes);
        buildRestaurantGraphs();
      }
    }).send(this);
  });
});

Αν κάποιος γνωρίζει γιατί το τυπικό αντικείμενο Request μου δημιουργούσε προβλήματα, θα ήθελα πολύ να μάθω.

Σχόλια (6)