1

我在 AJAX jQuery 中使用 beforeSend 来传递 REST 服务中的标头值。标头值在 Internet Explorer 8 中可以很好地传递。但标头值在 Firefox 中没有传递,也没有调用服务。

这是我的代码:

var postCall = function () {
$.support.cors = true;
var HFAssociateRefId = document.getElementById('MainContent_HFAssociateRefId').value;
var Input = {
     AssociateRefId: HFAssociateRefId
 };       
 alert(JSON.stringify(Input));
 var url = document.URL;
 var currentdate = new Date();
 var datetime = (currentdate.getMonth() + 1) + "/"
 + currentdate.getDate() + "/"
 + currentdate.getFullYear() + " "
 + currentdate.getHours() + ":"
 + currentdate.getMinutes() + ":"
 + currentdate.getSeconds();
 $.ajax({
       type: "POST",
       headers: { Accept: "text/plain; charset=utf-8", "Content-Type": "text/plain; charset=utf-8"
                },
       beforeSend: function (xhr, settings) {
       xhr.setRequestHeader("Date", datetime);
       xhr.setRequestHeader("URL", url);
                },
       url: "http://localhost:40680/LinkService.svc/TokenInsertion",
       data: JSON.stringify(Input),
       contentType: "application/json",
       dataType: "json",
       success: function (response) {
       alert(response);
                },
       error: function (xhr, status, error) {           
       alert(status);
                },              
});

我还尝试将 xhr 称为此链接中指定的新 XMLHttpRequest 。但它在 Firefox 中不起作用。??
提前致谢。

4

3 回答 3

1

看起来 Firefox 不尊重 header Date。它正在发送标头URL。我找不到任何资源来解释这种行为。

作为一种解决方案,您可以将标题重命名为Date其他名称。

Chrome 也显示相同的行为。

经过进一步调查,它看起来像标准的标准行为。查看标题为的部分Terminate these steps if header is a case-insensitive match for one of the following headers:

这个问题也有同样的问题

于 2013-02-21T08:25:08.370 回答
0

第一个问题是:

type: "post",
data: JSON.stringify(Input), <=== this is fail
correct is: data:{data:JSON.stringify(Input)}, 
recuest to $_POST['data']; is better if using arrays...

我建议您尝试使用 jquery ...这个示例非常简单。

基本样本!

Page 1 到 Html 或 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>Prueba Array 1</title>
**<!-- important download JQUERY 1.3 or late... -->**
    <script type="text/javascript" src="js/jquery-1.3.min.js"></script>
    <script>
    $(document).ready(function(){
    function toSend(d) {
        $.ajax({  
            type: "get", **// this is posible chain by "post"**
            url: 'test.php', 
            data: {datos:JSON.stringify(d)},  
            dataType: "json",
            success: function(test) { 
                //console.log("visualizacion del registro Name[1]: "+ test.names[1])
                console.info("Array Send");

                $.each( test, function( key, value ) {
                      console.log( key + ": " + value );
                      });
            }
        });


    }

    // send Submit
            $(":send").live('click',function(){
                                    console.log("preparing to send! ");              
                            // lista de entradas en un ID
                            var data    =   $('#form_1 input').serializeArray();
                        // Serializacion de las entradas input
    //                  // Acciones
                    toSend(data);

                    });


    });
    </script>
    </head>

    <body>
    <div id="ie">
    <form id="form_1" action="#" >
    <input name="Nombre" type="text" value="Petronila">
    <input name="Apellido" type="text" value="Sinforosa">
    <input name="Telefono" type="text" value="phone">
    <input name="Ciudad" type="text" value="Living in Caracas">
    <input type="submit" value="Send">
    </form>

    </div>

    </body>
    </html>

到下一个,复制这段代码,然后保存为test.php!并运行

<?php 
if(isset($_GET['datos'])){
$names  = array('john doe', 'JANE doe');
$ids    = array('123', $datos);

$data['names'] = $names;
$data['ids'] = $ids;


    echo json_encode($data);
}else{
    $error  =   array('error','No se recibieron metodos');
    $error  =   array('messeng','Method need chain test to Get');
    echo json_encode($error);
}
?>

ok 非常非常重要,在浏览器控制台中检查结果 F12 检查其中任何一项,您需要激活控制台 firefox 有时我测试并且可以!

于 2013-02-21T07:58:06.617 回答
0

参考 链接。Firefox 和 Chrome 从不接受添加新的自定义标头,因为它违反了浏览器安全规则。

于 2013-04-04T05:21:14.230 回答