2013-01-22 108 views
4

我在跨域調用AJAX的REST服務時遇到Syntax error: invalid label的問題。我的迴應是{ "d": 12000 }它顯示了「d」雙引號的錯誤。語法錯誤:無效標籤

我的代碼是這樣的:

$.ajax({ 
    type: 'post', 
    url: 'http://localhost/test.svc/getnumber', 
    dataType: "jsonp", 
    crossDomain: true, 
    contentType: "application/jsonp", 
}); 

我怎樣才能解決這個問題呢?

+2

url:'http:localhost // test.svc/getnumber – user2000423

+1

我想你必須在url後添加一個逗號:'http://localhost//test.svc/getnumber' –

回答

0

編輯您的代碼:

$.ajax({ 
    type: 'post', 
    url: 'http://localhost/test.svc/getnumber', 
    dataType: "jsonp", 
    contentType: 'application/json' 
}); 

有過失的urlspecification內容類型應爲application/json

+0

我的實際代碼就是這樣的。 .. $阿賈克斯({ 類型: 「POST」, 網址:SERVICE_URL + 「/ GetClientDeviceNumber」, 的contentType: 「應用程序/ JSONP」, 跨域:真實, 數據類型: 「JSONP」, 成功:函數(響應){ $ .session.set(「DEVICE_NUMBER」,response); } }); – user2000423

+0

最後將contentType更改爲'application/json'而不帶'p'。 –

+0

更改'contentType'不會有幫助,因爲腳本沒有發送任何數據。 –

0

利用這一點,你有一個錯誤的URL(雙//),也有一個問題,你contentType,它需要application/json

$.ajax({ 
    type: 'post', 
    url: 'http://localhost/test.svc/getnumber', 
    datatype: "jsonp", 
    contentType: 'application/json', 
}); 
+0

更改'contentType'不會幫助,因爲沒有數據正在發送到服務器。 –

3

它不工作,因爲你的服務器沒有返回一個JSONP值;它應該使用請求查詢字符串中的值callback並返回一段包含函數調用的JavaScript代碼。

例如,$.ajax()將請求發送到/path/to/script?callback=jsonp_12123123,讓您的服務器應該返回:

jsonp_12123123({"d": 12000}) 

使用PHP,你可以做到這一點使用:

<?php 

// DO NOT USE AS IS, SANITIZE $_GET!!! 
echo $_GET['callback'], '(', json_encode(array(
    'd' => 12000, 
)), ')'; 

而且,你不需要contentType: 'application/jsonp';它會被髮送到服務器,但你發佈的任何數據,所以它是沒用的。

+0

我如何在我的代碼中執行此操作。 – user2000423

+0

@ user2000423你不能在JavaScript內部做到這一點,並且你沒有顯示服務器代碼:) –

+0

我的服務器端代碼返回數字 – user2000423