2013-02-01 43 views
0

我想使用ajax將表單提交到另一個域上的遠程服務器(PHP服務器)。雖然我聽說過使用jsonp作爲數據類型,但我不確定如何使用它完全像如何從PHP服務器返回jsonp數據。有人能爲我提供這方面的幫助嗎? 如果可以,請指定我應該如何編寫用於返回jsonp的PHP腳本。如何在jquery mobile中執行表單數據的跨域發佈?

回答

1

我已經通過使用jsonp解決了跨域ajax請求。我可以通過GET而不是POST來提交表單,所以它取決於您希望表單數據的安全性。這是我如何做的:

PHP服務器代碼:

header('Access-Control-Allow-Origin: *'); 
header('content-type: application/json; charset=utf-8'); 

$first_name = $_GET['first-name']; 
$last_name = $_GET['last-name']; 

// Process the first-name and last-name here, like storing them in a database or something like that. 

$data = array('response' => "success"); 
echo $_GET['jsonp_callback'].'('.json_encode($data).')'; 

客戶端AJAX代碼:

function init(){ 
//allowing cross domain requests : 
     $.mobile.allowCrossDomainPages = true; 
     $.support.cors = true; 

     $.ajax({ 
       type:"GET", 
       url:"http://xyz.com/process.php", 
       cache:false, 
       data:formData, 
       crossDomain: true, 
       dataType:'jsonp', 
       jsonp:'jsonp_callback', 
       success:function(data){ 
        if(data.response=="success"){ 
          alert("success"); 
        }, 

       error:function(){ 
        alert('Sorry, unable to register! Try again.'); 
       } 
       }); 
      } 
0

下面是一個簡單的設置:

<?php 

$var1 = $_POST['var1']; 
// repeat mapping form post vars to local php vars 

// code to do something with vars such as INSERT to database goes here 

// select information or build up hard-coded response 

// set header for response 
header('content-type: application/json; charset=utf-8'); 

// setup response object 
$data = array('resposne' => 'succcess', 'formId' => 5); 

// return json object 
echo json_encode($data); 

?> 

然後你的jQuery可能是這樣的:

$.ajax({ 
    url: 'data.php', 
    data: $('#yourForm').serialize(), 
    success: doSomethingWithResult 
}); 

function doSomethingWithResponse(result) { 
    alert(result.response); // should alert "success" 
} 

如果這不起作用,有很多其他更具體的例子在網絡上。我發現這是一個很好的閱讀:http://www.geekality.net/2010/06/27/php-how-to-easily-provide-json-and-jsonp/

+0

我對你的回答試了一下,表單數據被公佈在PHP服務器,但ajax響應進入錯誤功能。當我用jsonp嘗試它時,它會禁用ajax響應,並且它不會對服務器執行POST請求,因此會將空行插入到數據庫中。請幫我解決這個問題。 – jigargm

+0

你將不得不發佈一些你的代碼,以幫助我做進一步的工作。你能否至少用你所做的Ajax調用來更新你的問題?那麼如果可能的話,你用來返回json的PHP代碼? – shanabus

+0

謝謝你的關注,我已經解決了這個問題,你可以看看我的答案。 – jigargm