0

こんにちは、次のエラーが表示されます。

200

SyntaxError: JSON.parse: 予期しない文字

JSON を firebug で確認したところ、次のように表示されました。

jquery-1.8.3.js (line 2)
POST http://localhost:1579/Comets/Progress/4c691777-2a9f-42ca-8421-d076ab4d0450/1

200 OK    
JSON     
Sort by key     
MsgId          "4c691777-2a9f-42ca-8421-d076ab4d0450"    
Status         2    
CurrentServer  "10.10.143.4"

私には問題ないように見えるので、どこが間違っているのか、なぜエラーが発生するのかわかりません

私のコードは次のとおりです。

Jクエリ:

$(document).ready(function Progress() {
                            var msgId = $('textarea.msgId').val();
                            var status = $('textarea.status').val();
                            $.ajax({
                                type: 'POST',
                                url: "/Comets/Progress/" + msgId + "/" + status,
                                success: function (data) {
                                    //update status
                                    alert("does this work");

                                },
                                error: function (xhr, ajaxOptions, thrownError) {
                                    alert(xhr.status);
                                    alert(thrownError);
                                }
                            });
                        });  

コントローラ:

  [JsonpFakeFilter]
        [AcceptVerbs(HttpVerbs.Post)]
        public JsonResult Progress(string msgId, int status, String callback)
        {

            //todo need to put recursive function on here (status)

            //check the ip - has it changed
            string strHostName = System.Net.Dns.GetHostName();
            var ipHostInfo = Dns.Resolve(Dns.GetHostName());
            var ipAddress = ipHostInfo.AddressList[0];
            var currentServer = ipAddress.ToString();

            var cometJson = new CometJson
                                {
                                    MsgId = msgId,
                                    Status = status,
                                    CurrentServer = currentServer
                                };

            //check what the status is if it is less than 4 we want to add one
            if (status <= 4)
            {
                status = status + 1;
                cometJson = new CometJson
                {
                    MsgId = msgId,
                    Status = status,
                    CurrentServer = currentServer
                };
                return Json(cometJson);
            }

            return Json(cometJson);
        }

どんな助けでも大歓迎です。

ありがとう

4

1 に答える 1

1

サーバーが無効な JSON を返します:

callback_dc99fd712fff48d6a56e0d9db5465ac3({"MsgId":"b91949f4-a30e-4f3f-b6e8-f83f‌​c40ada89","Status":2,"CurrentServer":"10.10.143.4"})

これは JSON ではありません。これはJSONPであり、クロスドメイン AJAX 呼び出しから使用されます。この場合、クロスドメイン AJAX 呼び出しを行っていないため、callback_dc99fd712fff48d6a56e0d9db5465ac3ラッパーを削除して有効な JSON を返す必要があります。

{"MsgId":"b91949f4-a30e-4f3f-b6e8-f83f‌​c40ada89","Status":2,"CurrentServer":"10.10.143.4"}

[JsonpFakeFilter]コントローラー アクションを装飾した属性は、JSON の結果をこのコールバックでラップする役割を担っていると思います。

したがって、それを取り除き、サーバーが有効な JSON を返すことを確認してください。

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Progress(string msgId, int status)
{
    ...
}
于 2013-03-11T12:06:08.077 に答える