2012-04-19 142 views
1

我讀過關於這個參數的其他問題的加載,但沒有人能解決我的問題。 我以這種方式打電話給一個php頁面。200 /'parsererror'與jquery上ajax張貼到https

$.ajax({ 
     url: 'https://mydomain/page.php', 
     type: "POST", 
     data: { 
      "arg1": arg1, 
      "arg2": arg2 
     }, 
     success: function(data, textStatus, xhr) { 
      //do stuff 
     }, 
     error: function(xhr, textStatus) { 
      alert("doLogin\n- readyState: "+xhr.readyState+"\n- status: "+xhr.status); 
     } 
    }); 

現在,如果我把這東西放在與php相同的服務器上,它工作正常。當我從本地主機啓動它時,麻煩就開始了。 在這種情況下,我在xhr中收到以下內容: readyState=0, status=0, statusText="error"。 閱讀關於這個話題的一些答案似乎是因爲同源限制,所以我在呼叫中添加了一些參數。值得注意的是:

dataType:"jsonp", 
    crossDomain: true, 

顯然這工作更好,因爲現在我收到readyState=4, status=200, statusText="success"。麻煩是,textStatus="parsererror"。我也試過其他的東西,如jsonpCallback,cache,async,jsonp在許多配置沒有運氣。

現在,我收不到任何數據,因爲這個調用只會給我一個我需要的cookie。

我的問題是:我是否正確地做事,對於初學者?在這兩種情況下,這種錯誤的原因是什麼?我稱之爲「https」/ POST的事實是否改變了一些東西,而不是簡單的http/GET?

第二個問題是,稍後我將不得不通過soap請求調用一些web服務,這會通過xml返回數據。將使用這種相同的技術工作(假設jQuery文檔很好,我可以寫dataType:"jsonp xml"讓它在飛行中轉換(並假設它是正確的技術))?我認爲它不會,因爲jsonp期望callbackFN({...})而不是xml的東西,對吧?

如果沒有一個是正確的,那麼正確的處理方式是什麼?我無法觸摸服務器,因此我僅限於客戶端。

回答

0

JSONP僅適用於JSON格式的數據!所以,如果你收到一個parseerror這意味着,你的PHP的輸出可能不能很好地形成JSON

沒有,它是不會輕易可以有XML作爲響應JSONP調用..

+0

那麼你會怎麼樣呢?任何方式來得到這個XML沒有設置代理,你會知道嗎? – Stephan 2012-04-19 12:54:39

+0

我承認文檔說應該可以使用數據類型:「jsonp xml」。但文檔也沒有提供詳細信息...甚至其他stackoverflow主題沒有涵蓋它呢......有趣的 – devnull69 2012-04-19 13:05:46

2

如果您將dataType設置爲JSONP,則只能獲取JSON數據。

因此,如果url(https://mydomain/page.php)沒有響應JSON對象,您將得到解析錯誤,因爲它試圖解析它並失敗。

+1

爲什麼文檔然後說:_「作爲jQuery 1.5,[...]你也可以使一個JSONP請求,將其作爲文本接收,並且由jQuery將其解釋爲XML:「jsonp text xml」。類似地,諸如「jsonp xml」之類的簡寫字符串將首先嚐試從jsonp轉換爲xml,如果失敗,則從jsonp然後從文本到XML。「_ 如果我把'dataType:」jsonp文本「'它可以工作,因爲它會把它當作文本,是正確的嗎?不過,我仍然遇到同樣的錯誤。 – Stephan 2012-04-19 12:57:48

+0

我不知道我們可以爲jsonp使用多個dataType,剛學過它。但這似乎是不可能的,因爲jsonp請求具有不同的請求類型。實際上我從來沒有見過這樣的簡單工作。和一個建議 - >你可以使用[yql](http://developer.yahoo.com/yql/) – ocanal 2012-04-19 13:14:17