【问题标题】:POSTing JSON data to Server URL将 JSON 数据发布到服务器 URL
【发布时间】:2013-01-21 07:58:20
【问题描述】:

我在使用 jQuery 中的 Ajax 调用将 JSON 数据发布到服务器时遇到问题,该函数未进入成功模式。当我使用 Firefox 的 POSTER 插件发布时,它会成功发布。分享sn-p的代码和截图:

function showSubscribeContent()
    {
        alert("*1*------- SUB CLICKED");

        var myJSONData = '{"data":{"mode" : "subscribe","technologyareas":[1],"assettypes":["podcast","documents"]}}';


        alert("*2*------- POSTING--------->"+myJSONData);


        $('#subscribePage').html('<h1>POSTING...</h1>');

        $.ajax({
            type: 'POST',
            url: 'https://tt.s2.acc.com/tt/subscribe-service/uid=sagar_mate',
            data: myJSONData,
            dataType: 'application/xml',
            success: function(data) { 
             alert("*3*------- POSTED SUCCESSFULLY TO THE SERVER");

             $('#subscribePage').html('<h1>POSTED</h1>');

          } // Success Function 
          });   // Ajax Call
}

我收到警报编号 12 但不是 3

另外,当我使用 Firefox 的 POSTER 插件发布时,它很容易发布。

响应成功。

我无法使用 AJAX 调用发布相同的数据。

谢谢, Ankit

【问题讨论】:

  • 查看我的答案here
  • 我无法理解答案。请帮忙。
  • 我得到了其中的一部分,但有一些类似服务器端功能的东西。
  • JSONP 用于从另一台服务器获取数据。那么它对移动应用程序有什么用处呢?

标签: javascript jquery ajax json post


【解决方案1】:

除非并且直到您的 AJAX 调用中的 URL 属于同一个域,否则我认为它不会成功发布。 Firefox 的 POSTER 插件对域没有做任何这样的限制,但是浏览器会对应用程序施加这个限制。

尝试检查错误:function(){alert(4);}

查看它是否至少到达错误处理程序

【讨论】:

  • 两者属于同一个域。 tt.stage2
  • @AnkitTanna 所以,你的应用在同一个域techtime.stage2.accenture.com
  • 我的应用程序发布从应用程序准备的 json 数据。但是应用程序不在同一个域上。应用程序从域中获取 xml 数据。
  • 我准备了一个 JSON 字符串,然后想将该 JSON 字符串发布到服务器。
  • 在这种情况下,您需要先将此 JSON 数据发布到您自己的域应用程序,该应用程序将简单地发布该 techtime.stage2.accenture.com 域上的数据。您将无法直接从该 URL 上的浏览​​器发布数据,因为它们不在同一个应用程序上
【解决方案2】:

请清楚你想要什么,当你使用 Firefox 的 POSTER 插件时,你已经将数据类型指定为 json,而当使用 ajax 时,你使用的是 xml。

如果您要以 JSON 格式发布数据,请使用 JSON.stringify,它接受 JSON 对象并将其转换为字符串。

【讨论】:

  • JSON.stringigy 最终会将数据转换为该字符串: var myJSONData = {"data":{"mode" : "subscribe","technologyareas":[1],"assettypes ":["播客","文档"]}};
【解决方案3】:

试试这个代码

function showSubscribeContent()
    {
        alert("*1*------- SUB CLICKED");
        var myJSONData = {"data":{"mode" : "subscribe","technologyareas":[1],"assettypes":["podcast","documents"]}};
        alert("*2*------- POSTING--------->"+myJSONData);
        $('#subscribePage').html('<h1>POSTING...</h1>');

        $.ajax({
            type: 'POST',
            url: 'https://tt.s2.acc.com/tt/subscribe-service/uid=sagar_mate',
            data: myJSONData,
            dataType: 'application/json',
            success: function(data) { 
             alert("*3*------- POSTED SUCCESSFULLY TO THE SERVER");
             $('#subscribePage').html('<h1>POSTED</h1>');

          } // Success Function 
          });   // Ajax Call
}

这里我更改了以下几行

将 myJSONData 从字符串转换为 JSON 对象

var myJSONData = {"data":{"mode" : "subscribe","technologyareas":[1],"assettypes":["podcast","documents"]}};

注意:如果这不适合您,请尝试使用字符串(您正在做的方式)

将数据类型更改为 JSON

dataType: 'application/json',

【讨论】:

  • 我在控制台中收到此错误:In Failure{"readyState":4,"responseText":"","status":406,"statusText":"Not Acceptable"} 2013-01 -22 17:41:49.595 TT[812:13403] [INFO] textStatus:error:Not Acceptable
  • 我已经尝试了你的建议。但它一次又一次地进入错误功能。 “dataType”用于返回什么类型的数据服务器。服务器返回的 XML 数据。
  • 我的错误。 :( 所以请使用contentType: 'application/json'。你有代码的实时示例吗?
  • 我正在尝试 contentType: 'application/json' 和 dataType: 'xml'。会检查并通知您。
【解决方案4】:

在 beforeSend 函数中添加标题对我来说效果很好。 CORS 的安全原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多