2010-06-04 62 views
1

我們已經發布了json api來在幾個域之間共享數據。我們提供了一個回調函數,允許來自遠程站點的任何GET以填充json的形式返回。使用jquery,你如何解決跨站點POST的問題,類似於填充跨站點jQuery GET的數據?

GET http://mysite.com/jsonapi/object?callback=

收益:({「someKey」:「someData」})

現在,這一切工作正常,只要我們GET'ting從遠程站點的數據,但我試圖做一個遠程的jQuery的那一刻發佈到api來獲取json數據,我在Firefox中得到一個null返回值。我可以將表單從遠程站點發布到json API,而不會有任何問題,並取回json數據。這個問題只出現在jQuery POST中。我想這是對我不完全理解的跨站腳本的某種保護。當我將jquery POST數據發佈到同一網站上的url時,我從中下載了jquery POSTing頁面,但是我沒有這個問題。

我該如何做一個jQuery發佈到遠程站點並處理我回來的json數據?我可以添加回調或對正在返回的json數據進行其他類型的修改,我不擔心安全性。我只是想能夠發佈表單而不是將參數作爲GET傳遞。

我該如何修改這個jQuery POST到遠程站點?

<form method="post" action="http://www.remoteSite.com" name="input"> 
     Quick form to test update public data:<br> 
     New data:<input type="text" value="New Data" name="newData"><br> 
     <input type="submit" value="Submit"> 
</form> 

<script src="_js/jquery-1.4.2.min.js" type="text/javascript"> </script> 
<script type="text/javascript"> 
$("form").submit(function(e){ 
    var form = $(this); 
    $.ajax({ 
     url : form.attr('action'), 
     method: form.attr('method'), 
     data : form.serialize(), // data to be submitted 
     success: function(response){ 
      alert(response); // do what you like with the response 
     } 
    }); 
    return false; 
}); 
</script> 

目前返回[JavaScript應用程序]作爲警報而不是預期的json返回數據。

回答

3

當您試圖通過javascript發佈同源策略時,其背後的明顯原因包括髮布潛在的敏感信息,而用戶不知道(通過ajax)。 Jquery支持JSONP,這種技術允許將數據發送到域外的站點,並且通過在頁面上動態創建一個元素來實現,該元素將響應封裝在函數調用中。這裏要注意的是,你不能通過GET請求一個元素作爲它的請求。

$.ajax({ 
    url : form.attr('action'), 
    method: form.attr('method'), 
    data : form.serialize(), // data to be submitted 
    success: function(response){ 
     alert(response); // do what you like with the response 
    }, 
    dataType: 'jsonp' 
}); 
+0

謝謝。正是我在找的東西。 – Chris 2010-06-04 14:45:21

0

跨域JSONP根本不是AJAX。它不使用XMLHttpRequest。它不過是一個加載JavaScript代碼的動態腳本元素。

所以使用ajax沒有辦法獲得跨域的帖子。但是,如果您提交表單,則可以執行一些iframe入侵以在遠程站點上創建隱藏的iframe帖子,然後將遠程站點嵌入到您的本地站點的iframe中,並傳遞要傳回的數據,然後將該javascript調用回電話。 (許多Facebook連接用於工作)。但除非你必須做一個職位不。