jquery was not called 解決辦法


1、ajax請求時需要跨域請求,開始的代碼如下:

1、今天寫ajax請求時需要跨域請求,開始的代碼如下:

var url = "http://localhost:8080/wechat/wxtestsurvey/getTestList.dol"; 
$.ajax({
            url:url, 
            type:'POST',
            cache:false,
            data:{"openId":openid}, 
            dataType: 'jsonp',
            jsonp:'jsoncallback',
            crossDomain: true,
            success:function(data) {
alert(data);
 },
error: function(XMLHttpRequest, textStatus, errorThrown){
                //alert("系統維護中,請稍后再試!");
                 alert(XMLHttpRequest.status);   // 200    
                 alert(textStatus);   // parsererror    
                 alert(errorThrown);  // SyntaxError: Unexpected end of input 
            }
      });

java代碼:

@RequestMapping(value = "/getTestList", produces = "application/json;charset=utf-8")
@ResponseBody
public String getTestList(String openId,HttpServletRequest request){

String jsoncallback = request.getParameter("jsoncallback");// 客戶端請求參數
JSONObject json = new JSONObject();
HashMap<String,Object> map = new HashMap<String, Object>();
map.put("name", "nick");
map.put("age", "23");
map.put("sex", "M");
map.put("code", "0");
return jsoncallback + "("+JSONObject.fromObject(json)+")";
}

結果走的卻是ajax的error,真的另外百思不得其解。彈出的結果如下:

 

Error: jQuery19105265967122703629_1498552272260 was not called

但是看響應確實返回的也是json字符串,結果如下:

"jQuery19108484969351256605_1498551586758({\"code\":\"0\",\"name\":\"nick\",\"age\":\"23\",\"sex\":\"M\"})"

嗯!你沒有看錯,這是真正的字符串。

去找度娘,找啊找啊找啊!整整找了一天,一天啊!

不過卻沒有結果。

網上有很多說法,但是他們說的我都符合要求,但就是沒啥用;

第二天我重新再找,然后我看到了$.getJSON()也可以進行跨域請求,然后我試了,

結果還是一樣,就是沒有成功。

我整個人快奔潰了,一個這個問題弄了這么久;

慢慢我冷靜下來,我想起了我以前也寫過跨域的后台代碼,但是好像和這個不一樣,我開始翻以前寫的代碼,嗯!被我找到了,然后我試着用了,我對此並不抱很大的希望,真的!但是成功了,我勒個去,心中頓時十萬草泥馬飛奔而過。

更改過后的代碼如下:

@RequestMapping(value = "/getTestList", produces = "application/json;charset=utf-8")
    @ResponseBody
    public void getTestList(String openId,HttpServletRequest request,HttpServletResponse response){
        
        String jsoncallback = request.getParameter("jsoncallback");// 客戶端請求參數
                String result = "";
               JSONObject json = new JSONObject();
        HashMap<String,Object> map = new HashMap<String, Object>();
        map.put("name", "nick");
        map.put("age", "23");
        map.put("sex", "M");
        map.put("code", "0");
           result = jsoncallback + "("+JSONObject.fromObject(json)+")";
        try {
            response.getWriter().print(result);
        } catch (IOException e) {
            logger.info("異常:",e);
        }
 }
 

其響應的數據如下:

 

jQuery19104063224993617034_1498551266153({"code":"0","name":"nick","age":"23","sex":"M"})

最后響應成功了!

我寫這個一是為了給自己一個警告,二是希望能幫助遇到和我一樣情況的朋友。

 

說說原因吧!

因為第一次返回它是一個純真的字符串,不算是json字符串。

第二次返回的才是json字符串;

至於為啥,還有待研究。

這個我也是轉發的,也遇到同樣的問題,感覺有用就復制過來了!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM