掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
關(guān)于JSONP的概念以及為什么要使用JSONP您可以參考JSONP教程,本文的重點(diǎn)在于演示下在JQUERY中的Ajax方法怎樣通過(guò)JSONP進(jìn)行遠(yuǎn)程調(diào)用。

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到通許網(wǎng)站設(shè)計(jì)與通許網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、申請(qǐng)域名、網(wǎng)頁(yè)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋通許地區(qū)。
首先介紹下$.ajax的參數(shù):
服務(wù)器端我們采用MVC的ACTION來(lái)返回?cái)?shù)據(jù)
代碼如下:
public class HomeController : Controller
{
//
// GET: /Home/
public ActionResult Index()
{
returnView();
}
public ActionResult ReturnJson()
{
string callback = Request.QueryString["callback"];
string json = "{'name':'張三','age':'20'}";
string result = string.Format("{0}({1})", callback, json);
returnContent(result);
}
} 客戶端使用jsonp來(lái)傳輸數(shù)據(jù)
代碼如下:
@{ ViewBag.Title = "Index"; Layout = "~/Views/Shared/_Layout.cshtml"; }
點(diǎn)擊提交按鈕后,發(fā)現(xiàn)服務(wù)器端的Request.QueryString["callback"]返回一個(gè)隨機(jī)函數(shù)名。這樣就被設(shè)置成JSONP格式來(lái)傳遞數(shù)據(jù)了
可以在傳遞過(guò)程中自定義函數(shù)名,只要使用jsonpCallback參數(shù)就可以了。
代碼如下:
jQuery AJAX實(shí)現(xiàn)調(diào)用頁(yè)面后臺(tái)方法
Add1: 使用AJAX訪問(wèn)aspx頁(yè)面和asmx使用方法是一樣的,區(qū)別在于aspx頁(yè)面中的方法必須為靜態(tài)方法,而asmx不需要.
1.新建demo.aspx頁(yè)面。
2.首先在該頁(yè)面的后臺(tái)文件demos.aspx.cs中添加引用。
using System.Web.Services;
3.無(wú)參數(shù)的方法調(diào)用.
大家注意了,這個(gè)版本不能低于.net framework 2.0。2.0已下不支持的。后臺(tái)代碼:
[WebMethod]
public static string SayHello()
{
//一定是要靜態(tài)方法,并且聲明為[WebMethod] 前端才可以訪問(wèn)
return "Hello Ajax!"; JS代碼:
$(function() {
$("#btnOK").click(function() {
$.ajax({
//要用post方式
type: "Post",
//方法所在頁(yè)面和方法名
url: "Demo.aspx/SayHello",
//沒(méi)有參數(shù)也一定要傳一個(gè)空參數(shù)
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data) {
//返回的數(shù)據(jù)用data.d獲取內(nèi)容
alert(data.d);
},
error: function(err) {
alert(err);
}
});
//禁用按鈕的提交
return false;
});
}); 頁(yè)面代碼:
運(yùn)行效果如下:
3.有參數(shù)方法調(diào)用后臺(tái)代碼:
[WebMethod]
public static string GetStr(string str, string str2)
{
return str + str2;
} JS代碼:
$(function() {
$("#btnOK").click(function() {
$.ajax({
type: "Post",
url: "demo.aspx/GetStr",
//方法傳參的寫(xiě)法一定要對(duì),str為形參的名字,str2為第二個(gè)形參的名字
data: "{'str':'我是','str2':'XXX'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data) {
//返回的數(shù)據(jù)用data.d獲取內(nèi)容
alert(data.d);
},
error: function(err) {
alert(err);
}
});
//禁用按鈕的提交
return false;
});
}); 運(yùn)行效果如下:
4.返回?cái)?shù)組方法
后臺(tái)代碼:
[WebMethod] public static ListGetArray() { List li = new List (); for (int i = 0; i < 10; i++) li.Add(i + ""); return li; }
JS代碼:
$(function() {
$("#btnOK").click(function() {
$.ajax({
type: "Post",
url: "demo.aspx/GetArray",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data) {
//插入前先清空ul
$("#list").html("");
//遞歸獲取數(shù)據(jù)
$(data.d).each(function() {
//插入結(jié)果到li里面
$("#list").append("頁(yè)面代碼:
運(yùn)行結(jié)果圖:
下面是Jquery中AJAX參數(shù)詳細(xì)列表:
| 參數(shù)名 | 類型 | 描述 |
| url | String | (默認(rèn): 當(dāng)前頁(yè)地址) 發(fā)送請(qǐng)求的地址。 |
| type | String | (默認(rèn): "GET") 請(qǐng)求方式 ("POST" 或 "GET"), 默認(rèn)為 "GET"。注意:其它 HTTP 請(qǐng)求方法,如 PUT 和 DELETE 也可以使用,但僅部分瀏覽器支持。 |
| timeout | Number | 設(shè)置請(qǐng)求超時(shí)時(shí)間(毫秒)。此設(shè)置將覆蓋全局設(shè)置。 |
| async | Boolean | (默認(rèn): true) 默認(rèn)設(shè)置下,所有請(qǐng)求均為異步請(qǐng)求。如果需要發(fā)送同步請(qǐng)求,請(qǐng)將此選項(xiàng)設(shè)置為 false。注意,同步請(qǐng)求將鎖住瀏覽器,用戶其它操作必須等待請(qǐng)求完成才可以執(zhí)行。 |
| beforeSend | Function | 發(fā)送請(qǐng)求前可修改 XMLHttpRequest 對(duì)象的函數(shù),如添加自定義 HTTP 頭。XMLHttpRequest 對(duì)象是唯一的參數(shù)。
function (XMLHttpRequest) {
this; // the options for this ajax request
}
|
| cache | Boolean | (默認(rèn): true) jQuery 1.2 新功能,設(shè)置為 false 將不會(huì)從瀏覽器緩存中加載請(qǐng)求信息。 |
| complete | Function | 請(qǐng)求完成后回調(diào)函數(shù) (請(qǐng)求成功或失敗時(shí)均調(diào)用)。參數(shù): XMLHttpRequest 對(duì)象,成功信息字符串。
function (XMLHttpRequest, textStatus) {
this; // the options for this ajax request
}
|
| contentType | String | (默認(rèn): "application/x-www-form-urlencoded") 發(fā)送信息至服務(wù)器時(shí)內(nèi)容編碼類型。默認(rèn)值適合大多數(shù)應(yīng)用場(chǎng)合。 |
| data | Object, String | 發(fā) 送到服務(wù)器的數(shù)據(jù)。將自動(dòng)轉(zhuǎn)換為請(qǐng)求字符串格式。GET 請(qǐng)求中將附加在 URL 后。查看 processData 選項(xiàng)說(shuō)明以禁止此自動(dòng)轉(zhuǎn)換。必須為 Key/Value 格式。如果為數(shù)組,jQuery 將自動(dòng)為不同值對(duì)應(yīng)同一個(gè)名稱。如 {foo:["bar1", "bar2"]} 轉(zhuǎn)換為 '&foo=bar1&foo=bar2'。 |
| dataType | String |
預(yù)期服務(wù)器返回的數(shù)據(jù)類型。如果不指定,jQuery 將自動(dòng)根據(jù) HTTP 包 MIME 信息返回 responseXML 或 responseText,并作為回調(diào)函數(shù)參數(shù)傳遞,可用值: "xml": 返回 XML 文檔,可用 jQuery 處理。 "html": 返回純文本 HTML 信息;包含 script 元素。 "script": 返回純文本 JavaScript 代碼。不會(huì)自動(dòng)緩存結(jié)果。 "json": 返回 JSON 數(shù)據(jù) 。 "jsonp": JSONP 格式。使用 JSONP 形式調(diào)用函數(shù)時(shí),如 "myurl?callback=?" jQuery 將自動(dòng)替換 ? 為正確的函數(shù)名,以執(zhí)行回調(diào)函數(shù)。 |
| error | Function | (默認(rèn): 自動(dòng)判斷 (xml 或 html)) 請(qǐng)求失敗時(shí)將調(diào)用此方法。這個(gè)方法有三個(gè)參數(shù):XMLHttpRequest 對(duì)象,錯(cuò)誤信息,(可能)捕獲的錯(cuò)誤對(duì)象。
function (XMLHttpRequest, textStatus, errorThrown) {
// 通常情況下textStatus和errorThown只有其中一個(gè)有值
this; // the options for this ajax request
}
|
| global | Boolean | (默認(rèn): true) 是否觸發(fā)全局 AJAX 事件。設(shè)置為 false 將不會(huì)觸發(fā)全局 AJAX 事件,如 ajaxStart 或 ajaxStop ??捎糜诳刂撇煌腁jax事件 |
| ifModified | Boolean | (默認(rèn): false) 僅在服務(wù)器數(shù)據(jù)改變時(shí)獲取新數(shù)據(jù)。使用 HTTP 包 Last-Modified 頭信息判斷。 |
| processData | Boolean | (默認(rèn): true) 默認(rèn)情況下,發(fā)送的數(shù)據(jù)將被轉(zhuǎn)換為對(duì)象(技術(shù)上講并非字符串) 以配合默認(rèn)內(nèi)容類型 "application/x-www-form-urlencoded"。如果要發(fā)送 DOM 樹(shù)信息或其它不希望轉(zhuǎn)換的信息,請(qǐng)?jiān)O(shè)置為 false。 |
| success | Function | 請(qǐng)求成功后回調(diào)函數(shù)。這個(gè)方法有兩個(gè)參數(shù):服務(wù)器返回?cái)?shù)據(jù),返回狀態(tài)
function (data, textStatus) {
// data could be xmlDoc, jsonObj, html, text, etc...
this; // the options for this ajax request
}
|
代碼:
$(document).ready(function() {
jQuery("#clearCac").click(function() {
jQuery.ajax({
url: "/Handle/Do.aspx",
type: "post",
data: { id: '0' },
dataType: "json",
success: function(msg) {
alert(msg);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest.status);
alert(XMLHttpRequest.readyState);
alert(textStatus);
},
complete: function(XMLHttpRequest, textStatus) {
this; // 調(diào)用本次AJAX請(qǐng)求時(shí)傳遞的options參數(shù)
}
});
});
});一、error:function (XMLHttpRequest, textStatus, errorThrown) { }
(默 認(rèn): 自動(dòng)判斷 (xml 或 html)) 請(qǐng)求失敗時(shí)調(diào)用時(shí)間。參數(shù)有以下三個(gè):XMLHttpRequest 對(duì)象、錯(cuò)誤信息、(可選)捕獲的錯(cuò)誤對(duì)象。如果發(fā)生了錯(cuò)誤,錯(cuò)誤信息(第二個(gè)參數(shù))除了得到null之外,還可能是"timeout", "error", "notmodified" 和 "parsererror"。
textStatus:
"timeout", "error", "notmodified" 和 "parsererror"。
二、error事件返回的第一個(gè)參數(shù)XMLHttpRequest有一些有用的信息:
XMLHttpRequest.readyState:
狀態(tài)碼
0 - (未初始化)還沒(méi)有調(diào)用send()方法
1 - (載入)已調(diào)用send()方法,正在發(fā)送請(qǐng)求
2 - (載入完成)send()方法執(zhí)行完成,已經(jīng)接收到全部響應(yīng)內(nèi)容
3 - (交互)正在解析響應(yīng)內(nèi)容
4 - (完成)響應(yīng)內(nèi)容解析完成,可以在客戶端調(diào)用了
三、data:"{}", data為空也一定要傳"{}";不然返回的是xml格式的。并提示parsererror.
四、parsererror的異常和Header 類型也有關(guān)系。及編碼header('Content-type: text/html; charset=utf8');
五、XMLHttpRequest.status:
FTP

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流