2016-08-04 171 views
-1

我使用JSONP調用跨域AJAX請求。現在,我可以使用CORS進行工作。但是,我想知道爲什麼它不會發生與JSONP。我看着其他類似問題的線程,但無法弄清楚爲什麼它不適用於我的情況。有效的JSON輸出JSONP解析錯誤

下面是代碼:

$.ajax({ 
     type: "GET", 
     url: http://XXXX:8000/sap/bc/test_rest/jsonp_test?mode=S&ticket=123, 
     dataType: "jsonp", 
     jsonp: false, 
     jsonpCallback: "myJsonMethod", 
     success: function (data) { 
      alert(data); 
     }, 
     error: function (httpReq, status, exception) { 
      alert(status + " " + exception); 
     } 
    }); 

現在,這個叫我的服務器,數據填充,然後我得到一個警告「解析錯誤 myJSONMethod當時不叫」上的回調URL http://xxxx:8000/sap/bc/test_rest/jsonp_test?mode=S&ticket=123&_=1470322282936

另外,在控制檯中出現錯誤爲未捕獲的SyntaxError:意外的令牌: 響應結構是:

{"ROOT":{"CONTRACT":"40002356","ITEM":"000010","KUNNR":"0000004676","NAME":"REALTY EXECUTIVES","NET_PRICE":19.95,"GROSS_PRICE":19.95,"MATNR":"144","SQFEET":""}} 

當我在jsonlint上運行這個JSON輸出時,它說它是一個有效的JSON。我不知道JSON在哪裏變得混亂。

+0

的ERR可以共享'myJsonMethod'代碼? – Venky

+1

你需要在myJsonMethod中包裝你的json(... yourJSONhere ...)。這意味着JSONP – Maxx

+0

有效的JSON與有效的JSONP不是一回事。這就是問題所在 - 你試圖使用一個返回JSON的API,就好像它是一個JSONP API一樣,而這根本行不通。 – Pointy

回答

1

你的數據必須是這樣的,爲JSONP是有效的:

myJsonMethod({"ROOT":{"CONTRACT":"40002356","ITEM":"000010","KUNNR":"0000004676","NAME":"REALTY EXECUTIVES","NET_PRICE":19.95,"GROSS_PRICE":19.95,"MATNR":"144","SQFEET":""}}); 
+0

非常感謝。我不得不手動將它包裝在服務器端,使它看起來像這樣,它完美的工作。 –

1

這個responseText必須是有效的JS代碼,並在響應是over.So如果你寫你的代碼就會立即運行

{"ROOT":{"CONTRACT":"40002356","ITEM":"000010","KUNNR":"0000004676","NAME":"REALTY EXECUTIVES","NET_PRICE":19.95,"GROSS_PRICE":19.95,"MATNR":"144","SQFEET":""}}

<script>標籤,控制檯會拋出這樣的

+0

你是對的。現在我明白了。謝謝!! –