2011-04-28 98 views
1

我提出以下的JQuery(V1.5.1)Ajax調用:爲什麼以下JQuery Ajax調用會導致IE9中的腳本錯誤?

function testAjaxCall() 
{ 
    $.ajax(
    { 
     url: "/Search.ashx?", 
     dataType: "json" 
    }); 
} 

這個調用返回以下JSON結果:

{ "objectData" : "100" } 

但在IE9失敗,出現以下錯誤(它工作正常在其他瀏覽器中):

SCRIPT1004:預期';' debug.finance.com,line 1 character 16

如果我刪除dataType:json參數,則調用成功。任何想法有什麼不對?我假設我的JSON不正確,但我通過驗證程序傳遞了它,但沒有報告任何錯誤。

請幫忙!

編輯:(詳細)在ASP.NET HTTP處理程序

I輸出JSON從服務器如下:

public void ProcessRequest(HttpContext context) 
{ 
    context.Response.ContentType = "application/json"; 
    context.Response.Write("{ \"objectData\" : \"100\" }"); 
    return; 
} 
+0

是那你的js包含在哪裏:debug.fin24.com,因爲這是錯誤來自 – ezmilhouse 2011-04-28 09:36:22

+0

你試過執行嚴格的json嗎?在其中添加' 「'所有'裏面的數據:'像這樣'?」 文化「: 」AF「, 」的queryString「: 」Naspers公司「, 」的pageSize「:10, 」的PageIndex「:0' ? – ianace 2011-04-28 09:37:19

+0

恐怕是主頁,包含了「文檔類型」上線,所以我假定系NR所指的可能是什麼地方執行的動態腳本。 – willem 2011-04-28 09:37:40

回答

1

你使用JSON編碼在你的服務器端腳本或你是否只是自己「建造」?

當我第一次開始擺弄JSON時,我錯誤地認爲你可以創建一個包括捲曲和方括號,冒號之類的字符串。當我使用瀏覽器開發工具檢查XHR時,看起來一切正常,除了正在接收的是一串字符而非對象。

後來我瞭解到的事實,你可以得到你的數據在服務器端,並使用(例如PHP) json_encode() 編碼數據,然後你可以使用jQuery的數據類型JSON作爲你已經完成了,來解析返回的Javascript對象。

這不完全相同的問題,但我的問題here應提供更多的背景信息,以瞭解發生了什麼。

+0

我建立我的JSON通過手在服務器端。我使用ASP.NET和做的Response.Write到HTTP上下文,我得看看你的帖子,謝謝。 – willem 2011-04-28 09:51:05

+0

我不熟悉ASP .NET,但我會希望有一個標準的編碼功能,試圖找到它 - 它會爲你節省調試的幾個小時,如果你的handbuilt JSON格式不正確 - 這是你知道的非常敏感;)有一件事我忘了提的是第三點。在答案中關於設置標題文本類型也很重要。 – T9b 2011-04-28 10:13:01

+0

我嘗試使用JSON.Net,這顯然非常好。最後,我得到了類似的JSON,但我仍然必須以字符串形式返回。棘手。所以沒有運氣。我下載的JQuery源代碼,試圖查明錯誤... – willem 2011-04-28 10:45:20

0

這裏的底層問題是IE9不支持AJAX上的JSON。相反,對於那個瀏覽器,你需要使用JSON-P。

參見:JavaScript: How do I create JSONP?

在客戶端,如下更改數據類型:

// Fall back to JSON-P for IE9 and lower: 
dataType: (('withCredentials' in new XMLHttpRequest()) ? 'json' : 'jsonp'),   

在服務器端,你發出JSON之前,這樣做:

// In JSON-P mode, wrap the JSON with the callback name and brackets: 
if (isSet ($_GET['callback']) && preg_match ('/^([_a-zA-Z0-9])$/', $_GET['callback'])) { 
    $json = $_GET['callback'] . '(' . $json . ');'; 
} 
相關問題