2011-08-01 178 views
0

我有一個HTML和JavaScript文件設置爲從啓用JSONP的Web服務中檢索數據。我的問題是,當我將html和.js文件部署到運行服務的目錄時,它將執行得很好,但如果我嘗試從另一個主機運行html和.js文件,則該請求不會使它Web服務和Java腳本給我一個服務器500錯誤。IIS配置允許來自JavaScript文件的跨域JSONP請求

我正在使用Chrome的開發人員工具來查看xmlhttprequest調用,這是我知道我得到500錯誤的唯一原因。

我已經做了相當多的研究,發現我需要將響應類型設置爲json並將usehttpget設置爲true的腳本方法標記集,我也完成了這兩件事正如嘗試在另一篇文章中提到的那樣在項目中設置clientaccesspolicy.xml。一切都無濟於事。

我確定這是一個Web服務或IIS端的配置問題,因爲當我把html和javascript文件放在我的代碼的目錄中並通過IDE運行Web服務時,我可以使用該實例調用Web服務的HTML,我的回答很好。但是如果html和javascript不在正在運行的代碼的工作目錄中,我得到一個服務器錯誤500.

這怎麼解決?

編輯 我還發現一個帖子說,500錯誤是基於請求大小,所以我說 < jsonSerialization maxJsonLength =「5000000」 /> 到我的web.config中沒有任何幫助。

回答

0

我對IIS配置瞭解不多,但是如果您嘗試使用JSONP解決跨域問題,那麼您不應該看到XMLHttpRequest。 JSONP的工作方式是,你注入與您試圖調用的URL的腳本標籤:

var tag = document.createElement("script") 
tag.src = "http://someurl.example.com?args=42&callback=wrapperFunction" 
document.body.appendChild(tag) 

然後,服務器使用回調查詢字符串參數來包裝它的響應在functioncall,像這樣:

wrapperFunction({some: 'response', arg: 42}); 

這樣做的原因是腳本標記不必遵循跨域策略,所以如果您沒有這樣做,那麼您沒有使用JSONP,並且必須遵守跨域規則。

我很抱歉,如果這確實是IIS配置的問題,我剛剛看到XMLHttpRequest與JSONP一起提到,並且「嘿,那是錯的!」。我希望它有幫助,否則只是忽視它:-)

+0

xmlhttprequest只是Chrome Java Script調試器的一部分,它允許我查看JSON格式的響應。我現在通過實現一個我最初在互聯網上找到的類的版本,然後發現編寫java腳本的組似乎也已經被使用了。 我正在使用的代碼是基於JsonHttpModule類找到本文中的一半左右[來自CodeProject](http://www.codeproject.com/KB/webservices/ASPNET_JSONP.aspx) 我不得不將其轉換爲VB ...但我現在的問題是,我得到多個JQUERY標籤。 – jnusz

+0

空間不足...下面是我的回覆示例: jQuery1620976034790975973_1312299185126(jQuery1620976034790975973_1312299185126(); jQuery1620976034790975973_1312299185126({「d」:{「__ type」:「OrionNetWebServices。CIPadResponse + CValidateTDACResponse「,」Success「:false,」CenterName「:」「,」FirstName「:」「,」LastName「:」「,」ErrorMessage「:」無法驗證臨時設備激活。遇到未知錯誤。請聯繫OrionNet Systems以獲得進一步的幫助。「,」ErrorAction「:」none「}}); jQuery1620976034790975973_1312299185126();); 任何幫助,爲什麼我得到額外的,將不勝感激 – jnusz

+0

好吧,我覺得像一個白癡爲我的最後2個職位。我發現的問題,這是我試圖實現響應過濾器的一種方式,然後另一種。問題是,我沒有拿出我的web.config引用從我的第一種方式在我的iis的根目錄web.config。@AHM,謝謝你的幫助。 – jnusz