2013-04-12 11 views
7

私はAJAXリクエストを作成しようとしていますが、問題があるようです。私のjson属性名が "({name":value "}のように)ある場合、それは動作しますが、属性名はそうではありません。私はここでexcepitonAngularJS JSON parse(ajax)

SyntaxError: Unexpected token s 
at Object.parse (native) 
at pb (http://localhost:8080/angularjs/lib/angular.min.js:12:472) 
at Vc.d.defaults.transformResponse (http://localhost:8080/angularjs/lib/angular.min.js:92:314) 
at http://localhost:8080/angularjs/lib/angular.min.js:92:127 
at Array.forEach (native) 
at n (http://localhost:8080/angularjs/lib/angular.min.js:6:192) 
at Qb (http://localhost:8080/angularjs/lib/angular.min.js:92:109) 
at c (http://localhost:8080/angularjs/lib/angular.min.js:93:295) 
at h (http://localhost:8080/angularjs/lib/angular.min.js:77:437) 
at http://localhost:8080/angularjs/lib/angular.min.js:78:169 

を次している私のコードです:

のindex.html:

<!doctype html> 
<html ng-app> 
<head> 
<script src="lib/angular.min.js"></script> 
<script src="js/indexApp.js"></script> 
</head> 
<body> 
    <div> 
     <div ng-controller="AjaxController"> 
      {{users.data}} 
     </div> 
    </div> 
</body> 
</html> 

indexApp.js

function AjaxController($scope, $http) { 
$scope.beers = [ 0, 1, 2, 3, 4, 5, 6 ]; 
console.log("OMW"); 
$http({ 
    method : 'GET', 
    url : 'data.json' 
}).success(function(data, status, headers, config) { 
    $scope.users = data; 
}).error(function(data, status, headers, config) { 
    $scope.users = "error" + data; 
}); 

};

data.json

{ 
    success : "true", 
    data: [{name:"val"}] 
} 

答えて

18

あなた必見ラップが"に属性名。これは、実行可能なJavaScriptコンテキストのオブジェクト表記よりも厳しい、有効なトランスポートJSONを指定する唯一の方法です。より緩やかな表記法を使用しようとすると、JSONパーサーが失敗します。

また、the spec for JSONも参照してください。

+1

私の週末の仕事を保存しました。ありがとう、トン。 – curlyreggie

+0

@エゼキエルビクターあなたはどのように属性名をラップしましたか? – Despertaweb

+0

@Despertawebどういう意味ですか?属性名は二重引用符で囲みます。例えば'' name'の代わりに '' name "'を使います。そこにJSONシリアライザを使用しているとします。 'JSON.stringify(...) 'またはPHPの' json_encode(...) 'はそれを正しく行います。 –

8

がさえ、私は同様の問題を持っていたソリューションである、あなたの文字列データが動作するようにJSON.parseまたはangular.fromJsonのための特定の形式にする必要があります。 EXについて

var myString = '{"name":"nomad"}'; 
console.log(JSON.parse(myString)); 

コンソール出力である:オブジェクト{名: "ノマド"}

0

私の場合には、次のエラーを返した:

SyntaxError: Unexpected token '

at Object.parse (native)

at fromJson (http://www.example.com/bower_components/angular/angular.js:1072:14)

角度で内部的に何が起こったのかは、次のとおりです。

JSON.parse("{'error': 'message'}"); // error 

実際には、JSONの文字列に"as the accepted answer points outという文字列が含まれていると予想されるため、パーサーエラーが返されます。

だから、私たちはJSON string specificationに準拠するサーバの応答を固定:

JSON.parse('{"error": "message"}'); // works! 
1

私は同じエラーが発生しました。 firstNameの1つは、このような空の文字列でした。 編集:このエラーは、主にjsonファイルに構文エラーがあることを意味する場合もあります。たとえば、jsonファイル内のいくつかのものをコメントアウトしたり、2つのキー値のペアを区切るカンマの間にスペースを与えたりしないと、同じエラーが発生しました。非常に初心者のミスは、これが他人を助けるだろうと考えました。