[英]Bring from a PHP file data sent by $.ajax using Json
由於我需要從php文件中獲取單獨的數據,並創建要與jQuery一起插入的HTML片段,因此我選擇了Json。
我從PHP主文件(在腳本標簽之間)發送它,如下所示:
$.ajax({dataType: "json", url:'course_generator.php', data:{co_subj_co:editedCourseId}}).done(function(newCourse){
var newCourseStructure = '<div class="tableRow dynamicRow noHeight injectedRow" data-isMultisubjectValue="'+isMultisubjectValue+'" data-subjectsNum="'+subjectsNum+'" data-id="'+courseId+'" id="'+courseId+'" data-abbrev="'+newCourseAbbrev+'" data-courseTypeId="'+newCourseTypeId+'" title="'+newCourseName+'"><div class="contentColumn40"><span class="tableContentText">'+newCourseName+' ('+newCourseTypeName+')</span></div><div class="contentColumn40">'+subjectList+'</div><div class="contentColumn10"><div class="tableIconLink"><a href="#"><div class="editIcon" data-id="'+courseId+'" title="Editar '+newCourseName+'"></div></a></div></div><div class="contentColumn10"><div class="tableIconLink"><a href="#"><div data-id="'+courseId+'" class="discontinueIcon" title="Discontinuar '+newCourseName+'"></div></a></div></div></div>';}
這將發送正確的editedCourseId
值。 在course_generator.php
里面是:
$courseId = $_POST['co_subj_co'];
$select_co = mysql_query("SELECT * FROM course_conf JOIN course_type ON co_fk_ct_id=ct_id JOIN co_rel_subj ON co_subj_co='$courseId' JOIN subject_conf ON su_id=co_subj_subj WHERE co_id='$courseId'");
$result_co = mysql_fetch_array($select_co);
$newCourseId = $result_co['co_id'];
$newCourseName = $result_co['co_name'];
$newCourseAbbrev = $result_co['co_abbrev'];
$newCourseTypeId = $result_co['co_fk_ct_id'];
$newCourseTypeName = $result_co['ct_name'];
$isMultisubjectValue = $result_co['co_multisubject'];
$newCourseValues = '{"newCourseId":'.$newCourseId.',"newCourseName":'.$newCourseName.',"newCourseAbbrev":'.$newCourseAbbrev.',"newCourseTypeId":'.$newCourseTypeId.',"newCourseTypeName":'.$newCourseTypeName.',"isMultisubjectValue":'.$isMultisubjectValue.'}';
恐怕我不能通過$courseId = $_POST['co_subj_co'];
正確接收它$courseId = $_POST['co_subj_co'];
,並且$newCourseValues
都沒有在我的主PHP文件中正確接收,因為newCourseStructure
沒有生成任何東西。 您能確定我確定正在犯的幾個錯誤嗎? 謝謝。
更新:
將我的PHP主文件更改為:
$.ajax({type : 'POST', dataType: "json", url:'config/forms/course_conf/course_generator.php', data:{co_subj_co:editedCourseId}}).done(function(newCourse){
var courseId = newCourse.newCourseId;
var newcourseName = newCourse.newCourseName;
var isMultisubjectValue = newCourse.isMultisubjectValue;
var subjectsNum = newCourse.subjectsNum;
var newCourseAbbrev = newCourse.newCourseAbbrev;
var newCourseTypeId = newCourse.newCourseTypeId;
var newCourseTypeName = newCourse.newCourseTypeName;
var newCourseStructure = '<div class="tableRow dynamicRow noHeight injectedRow" data-isMultisubjectValue="'+isMultisubjectValue+'" data-subjectsNum="'+subjectsNum+'" data-id="'+courseId+'" id="'+courseId+'" data-abbrev="'+newCourseAbbrev+'" data-courseTypeId="'+newCourseTypeId+'" title="'+newCourseName+'"><div class="contentColumn40"><span class="tableContentText">'+newCourseName+' ('+newCourseTypeName+')</span></div><div class="contentColumn40">'+subjectList+'</div><div class="contentColumn10"><div class="tableIconLink"><a href="#"><div class="editIcon" data-id="'+courseId+'" title="Editar '+newCourseName+'"></div></a></div></div><div class="contentColumn10"><div class="tableIconLink"><a href="#"><div data-id="'+courseId+'" class="discontinueIcon" title="Discontinuar '+newCourseName+'"></div></a></div></div></div>';}
而我的course_generator.php文件為:
$courseId = intval($_POST['co_subj_co']);
$subjectList = "";
$data ="";
$select_co = mysql_query("SELECT * FROM course_conf JOIN course_type ON co_fk_ct_id=ct_id JOIN co_rel_subj ON co_subj_co='$courseId' JOIN subject_conf ON su_id=co_subj_subj WHERE co_id='$courseId'");
$result_co = mysql_fetch_array($select_co);
$outArr['newCourseId'] = $result_co['co_id'];
$outArr['newCourseName'] = $result_co['co_name'];
$outArr['newCourseAbbrev'] = $result_co['co_abbrev'];
$outArr['newCourseTypeId'] = $result_co['co_fk_ct_id'];
$outArr['newCourseTypeName'] = $result_co['ct_name'];
$outArr['isMultisubjectValue'] = $result_co['co_multisubject'];
$subjectsNum=mysql_num_rows(mysql_query("SELECT * FROM co_rel_subj WHERE co_subj_co = '$courseId'"));
$outArr['subjectsNum'] = $subjectsNum;
echo json_encode($outArr);
這不是顯示結構化的HTML片段,而是$newCourseStructure
結果:
{"newCourseId":"243","newCourseName":"a","newCourseAbbrev":"ae","newCourseTypeId":"1","newCourseTypeName":"M\u00e1ster","isMultisubjectValue":"1","subjectList":"
Edici\u00f3n y Acabado de Imagen Digital<\/div>
","subjectsNum":1}
您的JSON字符串不是有效的JSON,因為您沒有在字符串值周圍使用引號。 無需手動創建JSON,而是創建一個數組或對象,然后對其進行json_encode()
。
您沒有包裝輸出JSON字符串。 使用echo
或print
。
將dataType : 'json'
添加到您的ajax請求中,以便jQuery將解析JSON,並返回本地JavaScript對象。 您在成功函數中使用的所有變量都是undefined
。 解析JSON之后,您應該使用
var courseId = newCourse.newCourseId; // and so on
您的ajax請求沒有類型,因此默認為GET。 如果要使用POST,請添加type : 'POST'
。
嘗試$_GET['co_subj_co'];
而不是POST
。
只要您不為jQuery的ajax調用指定方法,它都是由GET而不是POST進行的。
您實際上是在使用POST,還是正在觸發GET請求(您的瀏覽器開發人員工具應該可以輕松地告訴您)。 您還應該通過$courseId = intval($_POST['co_cubj_co']);
確保$courseId
為整數$courseId = intval($_POST['co_cubj_co']);
。 此外,您應該為找不到請求的ID的事件添加條件。
正如MueR所建議的,確保courseID為整數的原因是為了防止SQL注入(除非您希望人們做一些事情,例如隨意刪除整個數據庫)。 當然,這假定CourseID類似於autoincrement int。
但是,您還有許多其他問題。 您的JSON無效,因為您表面上寫出未加引號的字符串...您應該只使用json_encode:
$outArr = array();
$outArr['newCourseId'] = $result_co['co_id'];
$outArr['newCourseName'] = $result_co['co_name'];
...
echo json_encode($outArr);
就個人而言,我更喜歡只使用$ _REQUEST,它將$ _POST和$ _GET串聯在一起。 使其更容易。
我在代碼中注釋了兩件事:
$.ajax({
type : 'POST',
dataType: "json",
url:'config/forms/course_conf/course_generator.php',
data:{
co_subj_co:editedCourseId
}})
.done(function(newCourse){
var courseId = newCourse.newCourseId;
var newcourseName = newCourse.newCourseName;
var isMultisubjectValue = newCourse.isMultisubjectValue;
var subjectsNum = newCourse.subjectsNum;
var newCourseAbbrev = newCourse.newCourseAbbrev;
var newCourseTypeId = newCourse.newCourseTypeId;
var newCourseTypeName = newCourse.newCourseTypeName;
var newCourseStructure = '<div class="tableRow dynamicRow noHeight injectedRow"'
+ ' data-isMultisubjectValue="' + isMultisubjectValue + '"'
+ ' data-subjectsNum="' + subjectsNum + '"'
+ ' data-id="' + courseId + '"'
+ ' id="' + courseId + '"'
+ ' data-abbrev="' + newCourseAbbrev + '"'
+ ' data-courseTypeId="' + newCourseTypeId + '"'
+ ' title="' + newCourseName + '">'
+ '<div class="contentColumn40"><span class="tableContentText">'
+ newCourseName + ' (' + newCourseTypeName + ')</span></div>'
// WHERE IS subjectList DEFINED?
+ '<div class="contentColumn40">' + subjectList
+ '</div>'
+ '<div class="contentColumn10"><div class="tableIconLink">'
+ '<a href="#"><div class="editIcon" data-id="' + courseId + '"'
+ ' title="Editar ' + newCourseName + '"></div>'
+ '</a></div></div><div class="contentColumn10"><div class="tableIconLink">'
+ '<a href="#"><div data-id="'+courseId+'" class="discontinueIcon" '
+ 'title="Discontinuar '+newCourseName+'"></div></a></div></div></div>';
/*
* your HTML is generated, but you never put it in the DOM
*/
$('#idOutputWrapper').empty().html(newCourseStructure);
}
當您使用json響應中的subjectList時,請注意由於某種原因它帶有一個結束</div>
標記,也許您也應該更改它。
順便說一句:您的代碼格式太糟糕了,不好意思這么說。 您可以在將js上載到服務器之前對其進行壓縮,但是在對其進行處理時,它需要可讀性。 我只是對其進行了編輯,以使其更適合此處的代碼塊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.