2009-11-04 46 views
1

我想通過$ .post()將數據發送到cakephp(mvc)網站。下面是代碼

$('#testReq').click(function() { 
    console.log('Button Works'); 
    $.post('http://play.anthonylgordon.com/usersessions/store/', { data: 'test7' }, function (data) { 
     //data contains the json object retrieved. 
     console.log(data.status); 
    }, "json"); 
}) 

下面是cakephp數據檢索數據並存儲它。如果你知道蛋糕,很棒,但如果沒有的話,那很好。我真的想弄清楚我是否正確

<?php 
    class UsersessionsController extends AppController { 
     var $name = 'Usersessions'; 
     var $helpers = array('Html', 'Form','Ajax'); 
     var $components = array('RequestHandler'); 


     function store() 
     { 
      Configure::write('debug', 0); 
      $this->autoRender = false; 
      echo 'hello'; 
      if ($this->params['url']['data']) 
      { 
       $this->data['Usersession']['data'] = $this->params['url']['data']; 
       $this->Usersession->Save($this->data); 
       echo 'Success'; 
      } 
     } 
    } 
?> 

發送數據正如你可以看到我把「你好」它的任何評估之前。我應該能夠看到,在我的控制檯,但我沒有。我嘗試了get方法,我確實看到了'hello'的迴應。這是讓我得出的結論,你不能通過$.post發送數據CROSS域。似乎工作的唯一方法是getJSON(),除非有人能證明我是錯的。

回答

3

您無法執行普通的跨域ajax請求。你需要使用JSONP,這隻適用於GET請求(這是因爲jQuery向DOM注入script標籤以執行請求,而script標籤只能使用GET來獲取javascript)。

+0

thanx,我問這個人,他們不斷提出使用$ .post的建議。所以我混合了想法,而我可以使用它或不使用它。謝謝你清理那個。 – numerical25 2009-11-04 17:27:45

2

如果您希望能夠跨域請求,您需要在您的域上實現一個HTTP代理,代表您通過服務器端實用程序/庫(如Curl或Apache HTTPClient)代表HTTP請求,或者一些東西。

編輯: JSONP是一個解決方案,但我不會推薦它,除非你只需要進行GET請求(因爲這是所有的工作)。 JSONP也不一定是REST友好的,特別是在你需要發佈POST請求的情況下。如果POST滿足資源的語義以及您打算如何操作它,切換到GET只是使用JSONP對我來說感覺很難受。

+0

我對此一點都不熟悉。你知道更詳細的討論這個問題的好資源嗎? – numerical25 2009-11-04 17:56:30

+0

這裏有一篇關於HTTP代理背後的想法的好文章:http://developer.yahoo.com/javascript/howto-proxy.html – JasonWyatt 2009-11-04 18:36:41