使用$ .ajax()将POST发送到其他域上的PHP文件

时间:2012-01-31 07:08:49

标签: jquery

我可以使用$ .ajax()将POST发送到其他域上的PHP文件吗? A在$ .ajax()中有错误消息。在Chrome或Firefox中 - 电子邮件发送。在IE中 - 不发送电子邮件。

这是HTML文件

<form name="order" method="post"action="http://www.site.ru/images/stories/controller.php">
<label>1. Mark*:</label>
    <select name="mark" class="inputbox">
        <option ="selected"></option>
        <option>Audi</option>
        <option>BMW</option>
    </select>
<label>2. Model*:</label>
    <input type="text" name="model" size="30" class="inputbox"/>
<label>3. Year*:</label>
    <select name="year" class="inputbox">
        <option ="selected"></option>
        <option>2011</option>
        <option>2010</option>
    </select>
<label>4. Value, l*:</label>
    <input type="text" name="value" class="inputbox" size="30"/>
<label>5. Transmission*:</label>
    <select name="transmission" class="inputbox">
        <option ="selected"></option>
        <option>Manual</option>
        <option>Automatic</option>
    </select>
<label>6. VIN:</label>
    <input type="text" name="vin" size="30" value="" class="inputbox" maxlength="17" />
<label>7. E-mail*:</label>
    <input type="text" name="email" size="30" class="inputbox" />
<label>Note*:</label>
    <textarea cols="50" rows="5" name="text" id="contact_text" class="inputbox"/</textarea>
<input type="button" value="Send" onclick="valid();"></input>
</form>

<script src="http://admin.abcp.ru/common.jscripts/jquery/jquery-1.6.2.min.js"></script>
<script language="JavaScript" type="text/javascript">
function sendEmail(mark, model, year, value, transmission, vin, email, text){
    $.ajax({
        url: "http://www.site.ru/images/stories/controller.php",
        type : "POST",
        data : {
            mark : mark,
            model : model,
            year : year,
            value : value,
            transmission : transmission,
            vin : vin,
            email : email,
            text : text
        },
        success: function(){
            alert('Success.');
        },
        error : function (){
            alert('Error.');
        }
    });
}
</script>
<script language="JavaScript" type="text/javascript">
function valid(){
if (document.order.mark.value == ""){
    alert("Mark is empty.");
    document.order.mark.focus(true);
    return false;
}
if (document.order.model.value == ""){
    alert("Model is empty.");
    document.order.model.focus(true);
    return false;
}
if (document.order.year.value == ""){
    alert("Year is empty.");
    document.order.year.focus(true);
    return false;
}
if (document.order.value.value == ""){
    alert("Value is empty.");
    document.order.value.focus(true);
    return false;
}
if (document.order.transmission.value == ""){
    alert("Transmission is empty.");
document.order.transmission.focus(true);
    return false;
}
if (document.order.email.value == ""){
    alert("E-mail is empty.");
document.order.email.focus(true);
    return false;
}
if (document.order.text.value == ""){
    alert("Text is empty.");
document.order.text.focus(true);
    return false;
}
sendEmail(document.order.mark.text, 
    document.order.model.text,
    document.order.year.text, 
    document.order.value.text, 
    document.order.transmission.text,
    document.order.vin.text,
    document.order.email.text, 
    document.order.text.text);
}
</script>

这是PHP文件controller.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Обратная связь</title>
</head>
<body>
<?php
$from = $email;
$to = "pinaza@avt59.ru";
$subject = "PINAZA.RU - Запрос по $mark";
$message = "Марка автомобиля: $mark \nМодель автомобиля: $model \nГод выпуска: $year \nОбъем двигателя, л: $value \nТип КПП: $transmission \nVIN-код: $vin \nНеобходимые детали:     $text";
$headers = "Content-type: text/plain; charset = utf-8";
mail("$to", "$subject", "$message", "from: ".$from."\r\n"."$headers");
?>
</body>
</html>

7 个答案:

答案 0 :(得分:2)

您不能使用ajax发布到不同的域。

参考:http://en.wikipedia.org/wiki/Same_origin_policy

您可以使用代理。 将此数据发布到您的php / asp.net文件(位于同一域中),并从该php / asp.net文件发布数据到另一个域。

答案 1 :(得分:1)

位于远程域的php文件中的

将此行放在顶部

<? php
header('Access-Control-Allow-Origin: *');

$foo = $_POST['foo'];
echo json_encode($foo);    
?>

做一个帖子

$.ajax({
url:'/path',
type:'POST',
data:{foo:'bar'},
crossDomain:true,
success:function(data){
 console.log(data);// you will get bar 
});

答案 2 :(得分:1)

您需要使用jsonp在所有平台上实现此目的

答案 3 :(得分:0)

是的,你可以使用dataType:“jsonp”。 看看这个http://devlog.info/2010/03/10/cross-domain-ajax/

答案 4 :(得分:0)

我认为你会遇到跨域异常。如果您添加到POST请求crossDomain:true,它将起作用,但并非所有浏览器都支持它。有关这方面的更多信息,请访问http://api.jquery.com/jQuery.ajax/ 也许它有帮助

答案 5 :(得分:0)

通常,您无法通过$.ajax()JSONP电话进行任何跨域POST。

它适用于Chrome&amp; Firefox因为他们实现了Cross-domain HTTP request

您必须将此代码放在远程服务器(controller.php)

<?php header('Access-Control-Allow-Origin: *'); ?>

但话说回来,这并不能帮助你解决IE问题,但它可以解释为什么它不起作用。如果您希望它在IE上工作,您必须配置IE浏览器以允许&#34;跨域访问数据&#34;在&#34;安全级别&#34;

答案 6 :(得分:0)

定义表单ID并删除以下表单中的操作

<form name="order" method="post"action="#" id="myform" onsubmit="return submitForm();">

并在js中添加一个函数,使用ajax

将post请求发送到服务器
<script> 
function submitForm() {
    var form_data = new FormData(document.getElementById("myform"));        

    form_data.append("label", "WEBUPLOAD");   
       $.ajax({
          url: "YOUR URL HERE",
          type: "POST",
          data: form_data,
          processData: false,  // tell jQuery not to process the data
          contentType: false   // tell jQuery not to set contentType       

    }).done(function( data ) {
        console.log(data);
        //Perform ANy action after successfuly post data
    });   return false;      
} 
</script>

我收到了代码示例Send POST REQUEST BY USING AJAX