无法从AJAX(dataType:“jsonp”)调用Web服务读取数据

时间:2012-11-16 21:46:04

标签: javascript jquery jsonp

我正在使用ajax调用来从托管在某些服务器上的WebService执行POST和GET操作。

由于跨域问题,我正在使用dataType:“jsonp”。我可以在fiddler上看到Web服务发送的数据。我想访问我从服务中获得的数据,我不知道该怎么做。

这是我的ajax电话:

    $.ajax({
        type: method,
        url: "url",
        contentType: "application/json; charset=utf-8",
        dataType: "jsonp",
        jsonp: false,
        jsonpcallback:function(data){},            //What am I supposed to write here so that I can get the JSON data from Padded json
        success: successHandler,
        error: errorHandler
    });

这是我从服务中收到的json响应的近似值:

    {"Ideas":[
               {"Message":null,"IdeaId":1},
               {"Message":null,"IdeaId":1}
             ]
    }  

任何形式的帮助将不胜感激。我搜索了很多帖子但是无法通过。

提前谢谢。

4 个答案:

答案 0 :(得分:1)

  

jsonpcallback:function(data){}, //我应该在这里写什么,以便我可以从Padded json获取JSON数据

通常,没什么。如果您的JSONP服务真的不典型,您只需要指定回调。如果您指定了它,则需要是字符串

同样,您不应将jsonp: false设置为阻止生成回调参数。

您确实需要成功处理程序来处理数据。拥有错误处理程序也是一个好主意。

function successHandler(data) {
    console.log(data)
}

function errorHandler(jqXHR, errorType, exception) {
    console.log(errorType, exception);
}

$.ajax({
    url: "url", // Make this the real URL!
    dataType: "jsonp",
    success: successHandler,
    error: errorHandler
});

然后JSONP处理程序需要实际返回JSONP

服务器返回的Content-Type标头应为application/javascript

身体应该是:

  • 查询字符串中的callback键的值
  • (
  • 一些JSON
  • );

e.g。

jqueryCallback123u54yiyioeuioey8({ "foo": "bar" });

答案 1 :(得分:0)

我不是一个优秀的脚本编写者,但我在我的项目中使用了AJAX ..试试这个,它对我有用。

$.ajax({
    type: method,
    url: "url",
    dataType: "jsonp",
    success: function(data){
        console.log(data);
    }
});

答案 2 :(得分:0)

您需要使用控制台。例如。如果您使用firebugfirefox,则chrome's development console

你应该在代码中看到错误。

ajax()
jquery中的

函数需要success: function(data){ // do something with the data } 回调。

console.log(//some data) 

用于在脚本中的不同位置记录各种数据。

所以

$.ajax({
    type: method,
    url: "url",
    dataType: "jsonp",
    success: function(data){
    console.log(data);
}

});

这不是一个坏主意。

答案 3 :(得分:0)

我得到了这个并以这种方式运行:

<script type="text/javascript">

  var jsonpCallback;

  function checkDocId() {
    // AJAX request
    $.ajaxSetup({ cache: false });

    jsonpCallback = function(data) {
      $("#result").html(data.html);
    };

    $.ajax({
      type: "GET",
      url: "/secudok/ws/rest/checkdocid/jsonp/" + encodeURIComponent($("#docId").val()),
      dataType: "jsonp",
      jsonpCallback: "jsonpCallback",
      crossDomain: true
    });
  }

</script>

服务器返回包含在回调函数中的数据:function({JSON})。

jsonpCallback({"html":"<table>data</table>\n"})

在我的示例中,我们使用HTML,但也可以是JSON

yourCallbackName({"a":"1"; "b":"2"})