2011-11-20 58 views
1

我在向付款處理器提交信息的頁面上有一個付款按鈕,並且在同一頁面上有一個表單,其中有一些自定義字段,用於在您提交聯繫信息時更新聯繫人信息。Jquery提交表單並將特定值發佈到另一個腳本

我使用提交付款按鈕的jquery腳本,同時將表單的值提交給updatecontact php腳本。

但它不工作,它不會將值發佈到updatecontact php腳本。

請看看下面的代碼,看看你是否能發現我做錯了什麼。

http://jsfiddle.net/QunPb/1/

其中代碼的網址是:http://ofertasclaras.com/envio.php

+3

你不能在域之間使用ajax來POST,所以這個腳本根本無法在jsFiddle中工作。您實際嘗試運行此網頁的網址的網址是什麼? –

+0

你有沒有嘗試做你的jQuery函數中的表單提交作爲回調? – Smamatti

+0

URL是這一個:http://ofertasclaras.com/envio.php @Smamatti你能告訴我一個例子嗎? – sebas

回答

2

您正在嘗試創建具有多個提交操作的表單。因爲這時你的服務器發佈到DineroMail的,而不是訪問者的瀏覽器

捲曲將無法正常工作(除非你真的想你的服務器進行購買?);)

相反,使用jQuery添加一個Ajax請求到表單提交。通過使ajax請求不是異步的,它會在使用「return true」提交給表單的主動作(dineromail)之前完成該請求。

$(document).ready(function() { 
    $('#dinero-form').submit(function() { 
    $.ajax({ type: "POST", async: false, url: 'http://ofertasclaras.com/actualizar.php', 
       data: { email: $('#email').val(),nombrecompleto: $('#nombrecompleto').val(), direccion: $('#direccion').val(), ciudad: $('#ciudad').val(), provincia: $('#provincia').val(), codigopostal: $('#codigopostal').val(), casaodepto: $('#casaodepto').val(), gelypilas: $('#gelypilas').val() } 
    }); 
    return true; 
    }); 
}); 
+0

真棒解決方案。它的勝利者,謝謝! – sebas

0

在你的小提琴,啓動東西了,不會匹配任何選擇:如果這是唯一

$('#dinero-form') 

不知道問題,但您可能需要更新form標籤,如下所示:

<form action='https://argentina.dineromail.com/Shop/Shop_Ingreso.asp' 
    method='post' id='dinero-form'> 
+0

我忘了將它添加在小提琴上,但即時通訊使用它在頁面上,jsfiddle更新。這不是問題 – sebas

0

腳本附在頁面上;請求與發出請求的腳本的頁面相關聯。當您提交表單時,新頁面會替換舊錶單。這可以中斷請求。

而不是使用AJAX提交請求客戶端,你可以做它服務器端。常用的方法是創建一個服務類(使用cURL實現),因此您可以使用OO接口訪問HTTP服務。服務方法成爲實例方法。請求參數作爲數組或您編寫的某個請求類的實例傳遞給服務方法。

+0

我最初使用curl,但它不是重定向,你能建議一個代碼,所以我可以測試它並報告回來嗎? – sebas

0

會在你的情況這個邏輯流程工作:

1)捕捉使用AJAX 2)發送您所需要的數據,以您的網址,並在形式 3)返回false表格後當你的頁面返回成功,提交表單到支付網關頁面

// prime your element with a state that you can check on later 
// in thise case 'captured' via the .data() method, set to false (not yet captured by your script) 
$('#dinero-form').data('captured',false).submit(function(){ 
// bind to the submit event of the form and return false by default unless 
// captured is true, which means your form has been captured by your page 
// and you're happy to pass the form data on to the gateway (be sure this is over ssl on your own server, etc, as necessary for appropriate security) 
var $this = $(this), data = $this.serialize(), captured = $this.data('captured'); 

// if not captured, send to your script 
if(false === captured) { 
    $.post('/url-for-your-data/',data,function(response){ 
    // change this to your url where you want to capture it 
    // if you are returning json, use something like the below (with your own values) 
    // to determine if it was successful or not at storing the data you want to capture 
    if(response.success) { 
     // if it succeeded, then tell the form it has been captured and then trigger 
     // the original submit to the form action defined in your form 
     $this.data('captured',true); 
     $this.trigger('submit'); 
    } else { 
     // handle form validation here 
    } 
    },'json'); 

    // return false so the form doesn't submit and you can wait for the response 
    // usually a good idea to show a loading/activity graphic at this point if it's not quick 
    return false; 
} else { 
    // otherwise it was captured, and you can send to the gateway now 
    return true; 
} 
}); 

** WARNING **:雖然這工作,同時啓用JavaScript,你會從第一次提交給你的頁面中受益,捕捉到它,並設置任何會話變量然後以某種方式將它發送到您的網關併爲該交易提供一個唯一的ID您可以在用戶返回到您的網站時將其匹配。 (如果適用的話)。

**警告**:您應該始終通過SSL發送個人信息,因此請確保您有這樣的事情解決,並確保您的用戶知道他們的數據已保護到您的服務器和他們正在使用的網關:)

相關問題