2015-09-28 52 views
0

我試圖解析Json文件響應,但是我遇到了麻煩。如何用jsonp回調包裝json文件

我的JavaScript:

var url=encodeURIComponent("http://localhost:8080/repositories/rep_name?query=some_query&Accept=application/sparql-results+json"); 
    $.ajax({ 
      url: url, 
      type:'GET', 
      dataType: 'jsonp', 
      success: function(data, textStatus, xhr) { 
      // do something 
      $('#doQuery').html("QUERY"); 
      }, 
      error: function(xhr, textStatus, errorThrown) { 
      _UTILS.showModal("error", textStatus, 300, 100); 
      } 
     }); 

但我得到這個錯誤在Chrome 「未捕獲的SyntaxError:意外的標記」。我認爲,問題是,我的服務器給我的反應不是包裹JSONP回調,因爲當我檢查我的迴應,它顯示爲一個普通的JSON格式是這樣的:

{ 
    "head" : { 
    "vars" : [ "child", "parent", "count" ] 
    } 
} 

的這個代替:

callback({ 
    "head" : { 
    "vars" : [ "child", "parent", "count" ] 
    } 
}) 

但是當我檢查從AJAX請求URL,它實際上具有「&回調=」參數添加到URL的結尾,像這樣:

http://localhost:8080/repositories/rep_name?query=some_query&Accept=application/sparql-results+json&callback=jQuery21105273823537863791_1443406558624&_=1443406558625 

那麼爲什麼它仍然給我那個錯誤?

有一點需要注意的是,服務器發回一個.srj文件,但它是JSON格式,我不知道這是否與錯誤有任何關係。另外,我不能使用`dataType:'json',否則我會得到「XMLHttpRequest無法加載,沒有'Access-Control-Allow-Origin'標題出現在請求的資源上。錯誤。我不認爲我可以改變服務器。

回答

0

JSONP回調參數是服務器的一個提示,您希望JSON包裝在回調中。如果服務器沒有專門設置爲偵聽參數並在需要時提供JSONP,那麼它將忽略該參數。

由於服務器上沒有Access-Control-Allow-Origin頭,所以使用純JSON而不是JSONP也是不行的。

我會仔細檢查以確保沒有其他方式從服務器請求JSONP,否則,如果您無法訪問服務器上的代碼,並且無法通過其他方式請求JSONP ,你不幸的是運氣不好。

+0

實際上我自己運行服務器,但我對源代碼的訪問權限有限。通過執行使用嵌入式tomcat的.sh文件來運行服務器以部署.war文件。所以在這種情況下,我應該如何修改服務器? – al3xtouch