【问题标题】:Create a jsonp object dynamically in javascript(Send json object to Cross Domain)在javascript中动态创建jsonp对象(发送json对象到跨域)
【发布时间】:2012-12-06 07:24:52
【问题描述】:

我正在尝试将 json 对象发送到 servlet。

但它显示如下错误: XMLHttpRequest 无法加载 http://192.168.10.113:8080/collective-intellegence/SaveFeedback。 Origin http://192.168.9.185 是 Access-Control-Allow-Origin 不允许的

我的代码

var feedbackData = [];

        for (j in storeData.collection) {
            var fromData="abc";
            feedbackData.push({
                "queryid": queryId,
                "from": fromData,
                "to": GetUserDetails(storeData.item(j)),
                "isresolved": document.getElementById(("chk" + j)).checked
            });
        }
$.ajax({
                type: 'POST',
                url: saveDataURL,
                data: "{ 'feedback': '" + feedbackData + "' }",
                dataType: 'json',
                success: function (data) {
                    alert('Success');
                },
                error: function () {
                    alert('Error');
                }
            });

这是显示错误

我用谷歌搜索,发现我们无法将 json 对象传递给跨域。

所以我决定创建一个可以跨域传递的 jsonp 对象。

请帮忙解决问题

提前致谢

【问题讨论】:

    标签: json jquery cross-domain jsonp


    【解决方案1】:

    您必须将数据类型更改为 JSONP

    function hello(data){ // my call back function
                console.log(data);
            }
    
            $(function(){
                //It's not actually working, but htis code should work well
                //Let's say that you put your docStats in an object
                //like docStats = data.response.clickStats.docStats
    
                $.ajax({
                    url:'http://example.com',
                    type : 'POST' ,
                    dataType: 'jsonp',
                    data : {
                        fq: 'param1',
                        wt: 'param2',
                        "json.wrf" : 'hello' // how i call my callback function
    
                    }
                });
    
            })
    

    【讨论】:

    • 如果我做 jsonp,那么 servlet 不工作,因为它只采用 json 格式,如果我在数据类型中使用 json,它会显示我提到的错误。我必须发送一个 json 对象而不是 jsonp 对象
    【解决方案2】:

    您应该了解 JSONP 的工作原理:http://en.wikipedia.org/wiki/JSONP

    由于 JSONP 通过创建标签来工作,因此您只能将 JSONP 与 GET HTTP 方法一起使用,而不是 POST。您使用 JSONP 发送 的所有数据都在 URL 查询参数中发送(因为 GET 请求没有正文)。

    我认为您应该查看 CORS 并检查它是否是解决跨域问题的好方法:http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

    【讨论】:

      猜你喜欢
      • 2012-12-15
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      • 2016-10-02
      • 2020-10-24
      • 2021-07-30
      • 2023-03-14
      • 1970-01-01
      相关资源
      最近更新 更多