使用带有POST方法的$ .Ajax()发送JSON

时间:2013-04-20 10:39:22

标签: ajax jquery

我试图在jquery中使用$ .ajax()发送一个JSON对象,使用POST方法,从我的纯html页面到数据终端端点。火bug中的响应头给了我“内部服务器错误”,请任何人都可以告诉我这里我做错了什么: HTTP / 1.1 500错误 X-Backside-Transport:FAIL FAIL 内容类型:text / xml 连接:关闭

我的Jquery代码如下所示:

 $(document).ready(function () {
            $('#btn_submitcallback').click(function () {

                //add the values we need for the API to an object
                var objCallbackData = new Object;
                var d = new Date();
                var dat = d.getDate();
                var mon = d.getMonth() + 1;
                var year = d.getFullYear();
                var todayDate = dat + "/" + mon + "/" + year;
                alert("inside submit callback");
                //build the object
                objCallbackData.Store_Code = "POO726"; //$('#sel_title').val();
                objCallbackData.Title = $('#sel_title').val();
                objCallbackData.First_Name = $('#txt_firstname').val();
                objCallbackData.Last_Name = $('#txt_surname').val();
                objCallbackData.House_Number = $('#txt_houseno').val();
                objCallbackData.Street = $('#txt_streetname').val();
                objCallbackData.City = $('#txt_city').val();
                objCallbackData.Post_Code = $('#txt_postcode').val();
                objCallbackData.Email = $('#txt_email').val();
                objCallbackData.Phone_Number = $('#txt_phone').val();
                objCallbackData.Project_Type = "Bathroom";
                objCallbackData.Callbacktime_Morning = "Y";
                objCallbackData.Callbacktime_Afternoon = "Y";
                objCallbackData.Callbacktime_Evening = "N";
                objCallbackData.Callbacktime_Weekend = "N";
                objCallbackData.Callbacktime_Weekday = "Y";
                objCallbackData.Helparea_Measuring = "Y";
                objCallbackData.Helparea_Designing = "N";
                objCallbackData.Helparea_Usingspaces = "N";
                objCallbackData.Helparea_Services = "N";
                objCallbackData.Helparea_Productinfo = "N";
                objCallbackData.Status = "O";
                objCallbackData.Date = todayDate;

                // alert(objCallbackData.date);


                //turn the object in to a JSON string
                var myJson = JSON.stringify(objCallbackData);
                alert(myJson);


                $.ajax({
                    type: 'POST',
                    url: 'http://xb629050-s1.uk.b-and-q.com:9340/api/callback',
                    contentType: 'application/json; charset=utf-8',
                    data: myJson,
                    dataType: 'json',
                    success: function () {
                        alert("good");
                    },
                    error: function (xhr, status) {
                        switch (status) {
                            case 404:
                                alert('File not found');
                                break;
                            case 500:
                                alert('Server error');
                                break;
                            case 0:
                                alert('Request aborted');
                                break;
                            default:
                                alert('Unknown error: ' + xhr.statusText);
                        }
                    }
                });


            });
        }); 

2 个答案:

答案 0 :(得分:0)

Ajax不支持跨域请求。 你需要使用jsonp方法。

另见

How to make cross domain ajax call using jQuery JSONP

答案 1 :(得分:0)

@Thrustmaster是对的,你不能使用POST请求进行跨域异步操作需要使用GET,因为在引擎盖下会加载脚本标记内容。

试试这个:

$.getJSON("http://xb629050-s1.uk.b-and-q.com:9340/api?callback=?", 
    objCallbackData, processServerResponse);

其中processServerResponse是在获取数据后将被调用的函数:

function processServerResponse(data) {
// processing data from server
}

请参阅“免费geoIP”服务。尝试浏览:http://freegeoip.net/json/?callback=handleResponse

PS一些来自wiki的摘录:

  

..从server1.example.com提供的网页无法正常连接   与server1.example.com以外的服务器通信或与之通信。一些   例外包括HTML元素。利用开放   元素的策略,一些页面使用它们来检索   以动态生成的JSON格式运行的JavaScript代码   来自其他来源的数据。此使用模式称为JSONP。   对JSONP的请求不是JSON,而是任意JavaScript代码。   它们由JavaScript解释器评估,而不是由JSON解析   解析器。