2013-04-05 87 views
3

我嘗試使用以下jQuery的徵召令Ajax調用到我的服務器:語法錯誤:使用jQuery.ajax()無效的標籤

$.ajax({ 
    type: "GET", 
    dataType: "jsonp", 
    url: "http://iceworld.sls-atl.com/api/&cmd=time", 
    success: function (data) { 
     console.log("success"); 
     console.log(data); 
    }, 
    error: function (error) { 
     console.log("error"); 
     console.log(error); 
    }, 
}); 

我得到的數據,我從瀏覽器期望,但螢火蟲口口聲聲說「語法錯誤:無效的標籤」,如下圖所示:

invalid label

那麼,是什麼讓我爲難,所以錯誤回調被調用,而不是成功的原因。我想知道我在這裏做錯了什麼。

+0

貌似有效的JSON我,還是我得到'意外標記:'在Chrome中。 – 2013-04-05 01:27:50

+1

查看來自該URL的響應,它以「text/HTML」而不是「test/JSON」的形式出現。儘管你希望jQuery能夠應付這一點。 – 2013-04-05 01:40:31

回答

1

如果沒有更多的細節和服務器發送的響應,很難清楚地回答。但看着這個,它看起來像服務器返回有效的JSON;不是JSONP包裝函數。嘗試改變dataTypeJSON(雖然沒有答應,就需要更多的信息,以確保

7

JSONP數據必須以格式返回:callback(jsonObject)。這就是爲什麼你會收到invalid label錯誤。它期望的是一個函數,而不是一個JSON對象。您需要修改您的服務器代碼以使用回調函數的名稱來包裝返回值。當您請求JSONP時,名稱會自動添加到jQuery的請求中。如果你看的要求,你應該看到這樣的事情:

http://iceworld.sls-atl.com/api/&cmd=time?callback=jQuery191035087670385837555_1365126604422&_=1365126604423 

你的腳本需要採取callback參數,並用它來包裝數據,所以這個例子是這樣的:

jQuery191035087670385837555_1365126604422({"status":1,"data":"1365126534"}) 

如果您使用同一來源訪問服務器,則可以簡單地使用JSON。

+0

你將如何去回調與回調數據? – ChristopherStrydom 2013-08-27 01:15:47

+0

在服務器端?從字面上看,你把你的JSON字符串,並把它的回調函數名稱。因此,不是返回'{「data」:「mydata」}',而是返回'callbackName({「data」:「mydata」})'。 – 2013-08-27 16:06:23

0

你的json返回值的格式應該是function_name(json_data)
這樣的:

return({"status":a,"data":"123456789"}) 

創建的功能爲「回報」或者相同的名稱與JSON返回值給出。並且返回函數將在有響應時自動調用。

$.ajax(
{ 
    type: "GET", 
    dataType: "jsonp", 
    url: "http://iceworld.sls-atl.com/api/&cmd=time", 

    error: function(error) 
    { 
    console.log("error"); 
    console.log(error); 
    }, 
}); 

function return() 
{ 

console.log(data); 

} 

跳它會正常工作