2011-10-21 23 views
7

私は、COMコンポーネントを介してインターフェイスされているソフトウェア内のオブジェクトを表す、画面上のクリック可能なオブジェクトを多数持っています。jQuery AJAX関数 - Chrome投げ "Uncaught SyntaxError:予期しない番号"

オブジェクトをクリックすると、オブジェクトの名前、セッションID、実行するコマンドが送信されます。

私が実装しようとしている特定のコマンドのためのコードは、C#ベースのASP.NETページです:

case "myClick": 
       dynamic simObj = S8COM.get_SimObject(Request["id"]); 
       responseData = "{name:" + simObj.Name.ToString() + ",countInRoutes:" + simObj.CountInRoutes.ToString() + ",countOutRoutes:" + simObj.CountOutRoutes.ToString() + ",index:" + simObj.Index.ToString() + ",capacity:" + simObj.Capacity.ToString() + ",completed:" + simObj.Completed.ToString() + ",routeOutMethod:" + simObj.RouteOutMethod.ToString() + "}"; 
       break; 

これは「キャッチされないでSyntaxErrorを投げ、いくつかのオブジェクトのための罰金ではなく、他の人の作品:予期しない番号 "例外が発生します。

私は、この特定の関数を呼び出すために使用するJSは、次のとおりです。

S8Web.Requestmanager.makeRequest({ data: { command: "myClick", id: aItem.id }, async: true, callback: function(data){ 
         alert(data.CountInRoutes); //Do a vardump of the response 
         }}); 

応答のカップルだけでなく、第二は、予期しない数値例外をスローに対し、最初のものは、正常に動作します:

jsonp1319203225074({name:Start,countInRoutes:0,countOutRoutes:1,index:5,capacity:0,completed:0,routeOutMethod:4}); 

jsonp1319203225066({name:Process 1,countInRoutes:1,countOutRoutes:1,index:1,capacity:1,completed:0,routeOutMethod:1}); 

結果に影響を与える可能性のある唯一のことは、「プロセス」と「1」の間の空白です。それはこのエラーを投げているのでしょうか?

+0

このエラーをスローするのはクロムブラウザのみですか? –

+2

うん...それは引用符で囲む必要がある文字列なので.. 'name: 'Process 1'' –

答えて

13

あなたは非常にうまく閉鎖された引用符に問題があるかもしれません。

例:

<a href='#' onclick="doStuff('joe, '2844')">click here</a> 

最初のパラメータが正しく閉じられていないので、'ジョー'として解釈されます。その結果、最初の引用符を使用せずに、2844 'が残りの関数呼び出しのままになります。このような状況では、予期しない番号のエラーが発生します。

0

エラーの原因は不明ですが、シリアライザに手作業ではなく作業をさせることを検討してください。ブラウザで異なる解釈をするのに役立つかもしれません。

この例では、文字列プロパティparam1 + param2を持つ構造体があります。これらのリストも簡単にシリアル化できます。

必要なプロパティを持つ単純な構造体を作成するだけです。

  var jss = new JavaScriptSerializer(); 
      var jsonApp = new StringBuilder(); 
      MyStruct item = new MyStruct(); 
      item.param1 ="111"; 
      item.param2 ="222"; 
      jss.Serialize(item, jsonApp); 
      Response.Clear(); 
      Response.Headers.Add("Content-type", "application/json"); 
      var resp = HttpContext.Current.Request["callback"] + "(" + jsonApp.ToString() + ")"; 
      Response.Write(resp); 
      Response.End(); 
5

ない、これはあなたを助けるかどうかわからが、私はクロームで同じエラーを得ていた、それは私のJSONデータを引きずっているので、「0」であった:

{id: "6"}0 

0が後塵JSONデータは「exit;」を追加するのを忘れてしまったため私のPHP関数でAJAX呼び出しを処理していました。私はまた、FireFoxで同じコードを実行することをお勧めします。 FireFox多くの場合、クロムよりも有益なエラーメッセージが表示されます。

Error: SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data

幸い!

+0

ありがとう!私はPHP関数の最後に 'die()'を追加し、それは 'SyntaxError:unexpected number'の問題を解決しました! –

0

はまた私の文が予期しない構文引き起こした場合に "0" を持っていた:Chromeで予想外の数を、比較されました:

if (bcn.length==0 && ecn.length==0 0 && corr.length==0)

余分0、それを参照してください?私は最初のいくつかの一見それをキャッチしませんでした。

関連する問題