2015-04-20 8 views
8

Ich habe Laravel Response :: json verwendet, um eine JSON-Antwort zu generieren.SyntaxError: JSON.parse: unerwartetes Zeichen in Zeile 1 Spalte 2 der JSON-Daten - FireBug meldet diesen Fehler. Irgendeine Lösungsmöglichkeit?

return Response::json(array('subjects' => $subjects, 'year' => $year, 'sem' => $sem)); 

Wenn ich die Anfrage ausführen, bekomme ich eine gültige JSON (getestet in JSONLint) als Antwort.

Aber die folgende jQuery-Methode schlägt fehl: $.parseJSON(data)

Ich erhalte den folgenden Fehler in FireBug:

SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data

Die Antwort, die ich empfangen:

{ 
    "subjects": [ 
     { 
      "id": 1, 
      "name": "Control Systems", 
      "semester": 1, 
      "year": 3, 
      "branch_id": 4 
     }, 
     { 
      "id": 2, 
      "name": "Analog Communications", 
      "semester": 1, 
      "year": 3, 
      "branch_id": 4 
     }, 
     { 
      "id": 3, 
      "name": "Linear IC Applications", 
      "semester": 1, 
      "year": 3, 
      "branch_id": 4 
     }, 
     { 
      "id": 4, 
      "name": "Antennas & Wave Propagation", 
      "semester": 1, 
      "year": 3, 
      "branch_id": 4 
     } 
    ], 
    "year": 3, 
    "sem": 2 
} 

und der Code, wo ich bin versuchen, es zu analysieren:

$(document).ready(function() { 
    $('#branchAndSubjects').click(function() { 
     $.post('/findBranchAndSubjects', { 
      roll: roll, 
      _token: "{{csrf_token()}}" 
     }, function(data) { 
      var subjects = $.parseJSON(data); 
     }); 
    }); 
}); 

Antwort

19

Wenn Sie die $.parseJSON(data) in einem Ajax-Erfolg Handler tun Da Sie die $.parseJSON(data) in einem Ajax-Erfolg Handler tun, ist das Problem mit ziemlicher Sicherheit, dass jQuery hat bereits analysierte es für Sie. jQuery wird sich die Content-Type der Antwort anschauen, und wenn es application/json ist, wird es analysieren und das geparste Ergebnis Ihrem Erfolgshandler zur Verfügung stellen. Die erste Sache, die passieren wird, wenn Sie das in $.parseJSON übergeben, wird sein, dass es zurück in eine Zeichenkette umgewandelt wird ("[object Object]", in Ihrem Fall), die $.parseJSON dann nicht parsen wird.

Verwenden Sie einfach data wie sie ist, es ist bereits ein Objekt, dank der automatischen Analyse:

$(document).ready(function() { 
    $('#branchAndSubjects').click(function() { 
     $.post('/findBranchAndSubjects', { 
      roll: roll, 
      _token: "{{csrf_token()}}" 
     }, function(data) { 
      console.log(data.year);    // 3 
      console.log(data.subjects.length); // 4 
      console.log(data.subjects[0].name); // Control Systems 
     }); 
    }); 
}); 
+2

@ t-j-crowder Vielen Dank! Arbeiten wie es soll. Raten Sie, dass der JSON bereits geparst wurde. Danke nochmal! –

Verwandte Themen