解析错误回调函数没有调用jquery ajax错误?

时间:2016-10-03 20:47:21

标签: javascript jquery json ajax get

我一直在尝试我之前在其他用户询问的堆栈溢出中看到的所有方法。但是没有一个正在工作。请希望你们中的任何一个能指出我正确的方向

$.ajax({
 type: "get",
 dataType:'jsonp',
 params:jsonData,
 jsonp:false,
 jsonpCallback:"callbackfn",
 headers: { "api_key": "u5FocU4xLq2rBfZ1ZSV8o81R2usYzUEM3NaCinnV"},
  url: "http://localhost/url?name=xxx&email=xxxxxx@gmail.com",
 success:function(){
  alert("sucess function");
   },
  error: function(jqXHR, textStatus, errorThrown){
       alert(textStatus + " and<br> " + errorThrown);
    }
  });
 function callbackfn(data) {
   alert(data);
  }

回复是{ "firstName":"John", "lastName":"Doe" }


虽然响应是json,但会出现错误

  

解析错误.callbackfn未调用。

2 个答案:

答案 0 :(得分:1)

为了使用带有JSONP的自定义回调函数,您必须将其范围声明为全局,即

<script>

为什么?

这是因为成功的JSONP响应返回一个新的JavaScript文件,即封装在for i in range(X_val.shape[0]): # this line generates a 47151 x 5 x 10 array every time pred_list_i = [y_pred_array[i] for y_pred in y_pred_array] 标记中的JavaScript函数调用。由于每个脚本都在全局范围内独立评估,因此您希望另一个脚本可用的任何脚本函数也必须在全局范围内声明。因此,所有JSONP回调函数都应该是全局的。

修改

根据OP,这里找到的解决方案:Return JSONP via AWS Lambda/API Gateway完成了这个伎俩。问题与服务器端JSONP响应不当有关。

答案 1 :(得分:0)

确保来自服务器的响应是一个函数调用,并将响应数据作为参数。看起来您只是输出JSON,但JSONP期望使用响应数据进行函数调用。您的服务器响应应如下所示:

callbackfn({
  "firstName":"John",
  "lastName":"Doe"
});

你有jsonp: false jsonpCallbackdataType: 'jsonp' - 这很奇怪,因为你还提供了一个jsonp回调。也许如果由于跨源请求而不需要JSONP,则应删除jsonpCallback参数,只需使用响应手动调用该函数:

$.ajax({
   type: "get",
   dataType:'json',
   params:jsonData,
   headers: { "api_key": "u5FocU4xLq2rBfZ1ZSV8o81R2usYzUEM3NaCinnV"},
   url: "http://localhost/url?name=xxx&email=xxxxxx@gmail.com",
   success:function(data){
     callbackfn(data);
   },
   error: function(jqXHR, textStatus, errorThrown){
       alert(textStatus + " and<br> " + errorThrown);
    }
});