2013-06-22 104 views
0

我發現,jQuery有用於CORS爲什麼getJSON函數的回調沒有執行?

這裏的解決方案是在js文件的代碼:

$.getJSON('http://localhost:8001/location?callback=?', function(data){ 
     console.log(data[]); 
     console.log("anything"); 

    }); 

服務器JSON API:爲http://localhost:8001/location?callback=?請求,返回

(網址:{url :'bar'})

問題是console.log()從來沒有執行過,我把斷點放在那裏,但瀏覽器並沒有停在那裏。

PS十字聖主的要求是成功的,因爲我可以看到響應JSON文件是在Web檢查

任何想法的資源列表?

+0

響應應該封裝在函數內部。函數名稱應該與回調名稱相同。 –

+0

@SubirKumarSao:不,jQuery處理這個管道。 jQuery定義函數,接收回調,然後調用成功函數。 –

+0

*「我發現jquery有CORS的解決方案」*雖然JSONP是一般意義上的跨源資源共享,但我會避免將其稱爲CORS,因爲這很容易被誤讀爲相當不同的[跨源資源共享]( http://www.w3.org/TR/access-control/)技術。 –

回答

3

那麼,在這個問題不會在所有(它甚至不會發出請求)運行時出現,因爲它有一個語法錯誤代碼:

console.log(data[]); 
// Here --------^^ 

但我從你的說法假設你已經看到了你在某個時刻必須經過測試而沒有發現錯誤的反應。

您的服務器響應不正確。你曾說過

the server json API: for the http://localhost:8001/location?callback=? request, return

({url:'bar'})

...但是這不是一個有效的JSONP響應(這也不是一個有效的JSON響應,以三種不同的方式)。要形成正確的JSONP響應,您必須使用在callback查詢字符串參數中收到的函數名稱進行JavaScript函數調用。因此,舉例來說,如果callback__jquery456481345,則反應應該是:

__jquery456481345({"url":"bar"}) 

關於JSON:我說上面({url:'bar'})是不是在三種不同的方式有效的JSON響應。同樣,在你的榜樣,你正在使用JSONP(這是不同的),但只是爲了完整性,這裏有與該問題JSON:

  1. 一個JSON文件不能與(開始,就必須先從{[

  2. 在JSON中,屬性名稱(鍵)必須是用雙引號括起來。 "url": ...,而不是url: ...

  3. 在JSON中,字符串必須是用雙引號引起來,單引號無效,就像它們在JavaScript中一樣。所以"bar",而不是'bar'