2013-02-05 52 views
12

我有這個url調用。該URL返回預期JSON對象(瀏覽器直接調用),但是當我這樣做,通過AJAX與後續的線帶{「readyState」:4,「status」:200,「statusText」:「success」}的錯誤回調}

$.ajax({ 
     url: url, 
     type: "GET", 
     dataType:"jsonp", 
     success: function(data) { 
      alert(data); 
     }, 
     error : function(error) { 
      alert("no good "+JSON.stringify(error)); 
     } 
}); 

它返回我

no good {"readyState":4,"status":200,"statusText":"success"} 

我知道有其他人在計算器類似的問題,但似乎沒有人解決它。

+0

您驗證了響應數據? –

+2

但是'url'是什麼? –

+1

如果它返回json,那麼dataType應該是json而不是jsonp – Musa

回答

32

這表明HTTP請求已成功,但解析數據的嘗試不成功。

即數據未被格式化爲JSONP。

+0

牛眼!所以f *很容易找到它會是如果Ajax可以說錯誤信息....這是一個典型的「程序員的事情」... – Christian

+0

JS控制檯可能有一個更有用的錯誤消息...但JSONP是一個可怕的(幸好我們現在有CORS,所以我們不需要再使用JSONP)。 – Quentin

4

這些更改解決了我的問題。

//服務器端

echo $_GET['callback'] . '('.json_encode($data_to_encode).')'; 

// JS

$.ajax({ 
     url: url+"?callback=?", 
     type: "GET", 
     dataType:"jsonp", 
     success: function(data) { 
      alert(data); 
     }, 
     error : function(error) { 
      alert("no good "+JSON.stringify(error)); 
     } 
}); 
+0

如果這是您的服務器,那麼您爲什麼將響應作爲JSONP發送?服務器是否託管在不同的域中? –

+0

是的。服務器託管在不同的域中。它是一個「api」域,JavaScript是移動應用程序的一部分。 –

+0

但是,它只是不同的子域?換句話說,它是'api.example.com' vs'www.example.com'?如果是這樣,你仍然可以避免使用JSONP。 –

1

我只是有相同的問題,{ 「readyState的」:4, 「狀態」:200,「狀態文本「:」成功「}

這是因爲我忘記在我的PHP腳本中刪除回聲」你好「;我之前爲測試原因所做的聲明,所以我的PHP腳本發送一個字符串與JSON,這是我愚蠢的錯誤也許你也有同樣的

+0

這不是這個問題給我。正如我在答覆中所解釋的那樣 –

相關問題